如何找到以 ".html" 结尾但文件名中没有".bin"的文件?



我有以下类型的文件名:

  1. 一个以 .html 结尾:

    l_scheduling_suite.temp.html
    
  2. 另一种类型以 .html 结尾,但名称中包含.bin

    l_scheduling_suite.temp.bin.html
    
  3. 第三个以.bin结尾:

    l_scheduling_suite.temp.bin
    

文件名是任意的。它不一定总是在.html.bin之前有temp。我需要找到仅符合第一种格式的所有文件。我正在使用以下正则表达式通过管道连接到 grep 来查找文件,但我无法使其工作:

"(?=(.html)$) (?=(?!.bin))"

我应该如何使用 grep 或查找来获取正确的文件列表?

试试这个:

find -type f | grep -P '^.*(?<!.bin).html$'

这使用负回头看。基本上,这意味着,获取所有以 .html 结尾的名称,但只需确保.bin不在它之前。

使用简单的 glob 模式

你把问题复杂化得太复杂了。您所需要的(基于您发布的语料库)是:

find . -name *.temp.html

这将找到所有.temp.html 结尾的文件。您的其他示例不匹配,因为*.bin.html*.temp.bin与此 glob 模式没有重叠。

使用否定的球

如果你的语料库选择不当,并且你实际上试图匹配所有以.html结尾但名称中不包含.bin的文件,那么你只需将 find 实用程序与否定的 glob 一起使用,而无需诉诸正则表达式、管道、扩展的 shell glob 或其他扭曲。例如:

find . -name '*.html' -not -name '*.bin*'

最新更新