如何找出当前目录中不包含单词foo(使用grep)的文件?


当前回答

您可以单独使用grep(没有find)来完成。

grep -riL "foo" .

这是对grep上使用的参数的解释

     -L, --files-without-match
             each file processed.
     -R, -r, --recursive
             Recursively search subdirectories listed.

     -i, --ignore-case
             Perform case insensitive matching.

如果你使用l(小写),你将得到相反的(文件匹配)

     -l, --files-with-matches
             Only the names of files containing selected lines are written

其他回答

您可以单独使用grep(没有find)来完成。

grep -riL "foo" .

这是对grep上使用的参数的解释

     -L, --files-without-match
             each file processed.
     -R, -r, --recursive
             Recursively search subdirectories listed.

     -i, --ignore-case
             Perform case insensitive matching.

如果你使用l(小写),你将得到相反的(文件匹配)

     -l, --files-with-matches
             Only the names of files containing selected lines are written

这可能会对其他人有所帮助。我有混合文件Go和测试文件。但我只需要。go文件。所以我用了

ls *.go | grep -v "_test.go"

-v,——invert-match选择不匹配的行参见https://stackoverflow.com/a/3548465

也可以使用vscode从终端打开所有文件

code $(ls *.go | grep -v "_test.go")

下面的命令不需要find通过使用第二个grep来过滤svn文件夹。

grep -rL "foo" ./* | grep -v "\.svn"

我运气很好

grep -H -E -o -c "foo" */*/*.ext | grep ext:0

我用grep -v的尝试只是给了我所有没有“foo”的行。

下面的命令给出了所有不包含foo模式的文件:

find .  -not  -ipath '.*svn*' -exec  grep  -H -E -o -c  "foo"  {} \; | grep 0