递归 grep:排除特定目录

递归 grep:排除特定目录

我经常使用递归 grep 来查找具有特定内容的源文件。

grep -Rni "myfunc" .

在大型代码库上,这可能会变慢,因此我使用--incldue 来限制/列入白名单扩展。

grep -Rni --include=*.java "myfunc" .

不过,我认为排除(修剪)整个子目录会更有效:

grep -Rni --exclude=/.svn/ "myfunc" .

但是 --exclude 仅支持上述 *.java 之类的文件模式。我该如何排除目录?

答案1

你可能会调查确认

我刚开始使用它但它似乎非常适合这个。

答案2

grep -r --exclude-dir=dev --exclude-dir=sys --exclude-dir=proc PATTERN data

来源: https://stackoverflow.com/questions/2799246/grep-clusion-a-specific-folder-using

答案3

您可以使用 find 来代替:

find . -not -path "*/.svn*" -not -type d -exec grep -ni "myfunc" {} \; -print

好吧,这有点倒退了,你首先得到 grep 结果,然后然后路径。也许其他人有更好的答案?

答案4

还有 -prune 选项可以查找:

 find . -path "*/.svn*" -prune -o -not -type d -exec grep -ni "myfunc" {} \; -print

相关内容