小编典典

如何从 grep -R 中排除目录?

all

我想遍历所有子目录,除了“node_modules”目录。


阅读 178

收藏
2022-03-01

共1个答案

小编典典

解决方案 1(结合findgrep

这个解决方案的目的不是处理grep性能问题,而是展示一个可移植的解决方案:也应该适用于 2.5 之前的 busybox 或 GNU 版本。

使用 find , 排除目录 foo 和 bar :

find /dir \( -name foo -prune \) -o \( -name bar -prune \) -o -name "*.sh" -print

然后结合 find 和 的非递归使用 grep 作为可移植解决方案:

find /dir \( -name node_modules -prune \) -o -name "*.sh" -exec grep --color -Hn "your text to find" {} 2>/dev/null \;

解决方案 2(使用 的--exclude-dir选项grep):

您已经知道此解决方案,但我添加它是因为它是最新且有效的解决方案。请注意,这是一个不太便携的解决方案,但更易于阅读。

grep -R --exclude-dir=node_modules 'some pattern' /path/to/search

要排除多个目录,请--exclude-dir用作:

--exclude-dir={node_modules,dir1,dir2,dir3}

溶液 3(银)

如果您经常搜索代码,Ag (The Silver
Searcher)
是一个比 grep
更快的替代方法,它是为搜索代码而定制的。例如,它会自动忽略
中列出的文件和目录.gitignore,因此您不必一直将相同的繁琐排除选项传递给grepor find

2022-03-01