有没有办法从 grep 递归搜索中排除由该目录的路径指定的嵌套子目录?

有没有办法从 grep 递归搜索中排除由该目录的路径指定的嵌套子目录?

或者我必须使用ackorfind来实现这个?

这就是我想要的。假设我有这个目录结构:

dir/nesteddir/match.txt
otherdir/nesteddir/match.txt

如何仅排除第一个nesteddir?甚至可以使用 grep 吗?最明显的答案$ grep -r --exclude-dir="dir/nesteddir" "stringToFind" .似乎不起作用,我--exclude-dir使用 globbing、leading./等对各种路径进行的任何实验也不起作用。

阅读手册页和谷歌搜索没有帮助,我发现的这个用例的唯一提及是这个问题:grep --exclude-dir 行为:错误还是功能?

结论是这是 grep 2.12 中引入的错误,但我正在使用最新版本(2.16)和 grep 的错误跟踪器(https://debbugs.gnu.org/cgi/pkgreport.cgi?package=grep) 没有提及与 相关的任何内容--exclude-dir,所以我猜它要么已修复,要么是预期的行为。

如果能得到一些澄清真的很高兴。

答案1

的参数--exclude-dir是与目录的基本名称(即没有前导父目录的部分)相匹配的模式。例如,--exclude-dir=nesteddir排除dir/nesteddirotherdir/nesteddir(及其子目录)。

仅使用 GNU grep 无法排除一个目录而不排除其他同名目录。您需要使用更复杂的方法来选择文件,例如 GNU find:

find dir -path dir/nesteddir -prune -o -type f -exec grep -H 'pattern' {} +

相关内容