使用 grep 排除嵌套目录

使用 grep 排除嵌套目录

我想从 grep 搜索中排除嵌套目录,例如/path/to/file.例如:

jake@jake-laptop:~/test$ egrep -r --exclude-dir="path" "hello" .
jake@jake-laptop:~/test$ egrep -r --exclude-dir="to" "hello" .
jake@jake-laptop:~/test$ egrep -r --exclude-dir="file" "hello" .
jake@jake-laptop:~/test$ egrep -r --exclude-dir="path/to/file" "hello" .
./path/to/file/f.txt:hello

在最后一行中,未排除该文件,显然是因为我有多个随参数提供的嵌套目录exclude-dir。如何获取最后一个示例以排除path/to/file目录中的搜索?

答案1

似乎--exclude-dir仅与路径的基本名称(即当前子目录)进行比较。因此 path/to/file 永远不会匹配 dir "file",但只会--exclude-dir=file匹配,或者 glob 版本,例如--exclude-dir=*ile.

通常的替代方法是使用find,例如,如果它处理选项-path

find . -path ./path/to/file -prune -o -type f -exec egrep -l 'hello' {} +

之后的模式-path必须与包括起始目录在内的路径匹配,但您可以使用 glob 来简化,例如'*path*file*',其中 * 也匹配 / 。

否则,您可以求助于find | sed | xargs egrep.

相关内容