![递归 grep:排除特定目录](https://linux22.com/image/1221147/%E9%80%92%E5%BD%92%20grep%EF%BC%9A%E6%8E%92%E9%99%A4%E7%89%B9%E5%AE%9A%E7%9B%AE%E5%BD%95.png)
我经常使用递归 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