如何找出当前目录中不包含单词foo(使用grep)的文件?
当前回答
如果你正在使用git,它会搜索所有被跟踪的文件:
git grep -L "foo"
如果你打开了**子目录globbing,你可以在跟踪文件的子集中搜索(在.bashrc中使用shopt -s globstar):
git grep -L "foo" -- **/*.cpp
其他回答
如果你的grep有-L(或——files-without-match)选项:
$ grep -L "foo" *
为了完整,ripgrep版本如下:
rg --files-without-match "pattern"
你可以结合文件类型和搜索路径,例如:
rg --files-without-match -t ruby "frozen_string_literal: true" app/
下面的命令给出了所有不包含foo模式的文件:
find . -not -ipath '.*svn*' -exec grep -H -E -o -c "foo" {} \; | grep 0
这可能会对其他人有所帮助。我有混合文件Go和测试文件。但我只需要。go文件。所以我用了
ls *.go | grep -v "_test.go"
-v,——invert-match选择不匹配的行参见https://stackoverflow.com/a/3548465
也可以使用vscode从终端打开所有文件
code $(ls *.go | grep -v "_test.go")
如果你正在使用git,它会搜索所有被跟踪的文件:
git grep -L "foo"
如果你打开了**子目录globbing,你可以在跟踪文件的子集中搜索(在.bashrc中使用shopt -s globstar):
git grep -L "foo" -- **/*.cpp