查找所有不匹配的文件的最佳方法是什么?

What is the best way to find all the files that do not have a match?

我有一个大型应用程序,我需要查找不包含表达式的文件列表。 我一直在使用 The Silver Searcher 但我不确定如何得到相反的结果

例子 ag 'breadcrumbs' app/controllers 这给出了所有文件的列表和行号,我可以在控制器的目录中找到这个表达式

我想要得到的是所有没有breadcrumbs

的文件的列表

我也对 bash 或 shell 脚本持开放态度

感谢您的帮助

使用grep -vl:

find myprojectroot -type f | xargs grep -vl breadcrumbs

grep 使用正则表达式搜索文件,但纯文本也可以。

-v 仅在 未找到 时匹配 -l 列出文件(而不是每个匹配项)

xargs 执行命令,传递命令上的每一行

find X -type f 查找名为 X 的目录中或目录下的所有文件(-type d 查找您不需要的目录)

对于 The Silver Searcher (ag),ag -vl breadcrumbs directory_here 将满足您的需求。

-l 列出文件,-v 反转匹配以查找不匹配的文件。

你也可以ag -L breadcrumbs directory_here

-L 列出所有不包含匹配项的文件。

使用递归 grepsed 我们可以这样做:

grep -cr <pattern> <directory> | sed -n s/:0$//p

说明:grep-c 选项将导致它发出匹配的文件名以及用冒号分隔的匹配项数。因此,不匹配的文件的名称带有 :0.

后缀

在管道的下一阶段,我们使用sed-n 选项告诉它不要打印所有通过它的行,这意味着只有那些我们告诉它的行才会打印。我们使用 seds 命令编辑以 :0 结尾的行以删除该后缀。同时,我们添加 p 命令来打印这些匹配行。