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


当前回答

一个更简单的方法是使用“grep -v”来过滤结果。

grep -v node_modules . grep -i needle -R * |

其他回答

如果要排除多个目录:

"r"表示递归,"l"表示只打印包含匹配项的文件名,"i"表示忽略大小写区别:

grep -rli --exclude-dir={dir1,dir2,dir3} keyword /path/to/search

示例:我想找到包含单词“hello”的文件。我想搜索所有的linux目录,除了proc目录,boot目录,sys目录和根目录:

grep -rli --exclude-dir={proc,boot,root,sys} hello /

注意:上面的示例需要是root

注2(根据@skplunkerin):不要在{dir1,dir2,dir3}中的逗号后面添加空格

一个简单的工作命令:

root/dspace# grep -r --exclude-dir={log,assetstore} "creativecommons.org"

上面我grep文本“creativecommons.org”在当前目录“dspace”和排除dirs{日志,资产存储}。

完成了。

最新版本的GNU Grep(>= 2.5.2)提供:

--exclude-dir=dir

从递归目录搜索中排除匹配模式dir的目录。

所以你可以这样做:

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

有关语法和用法的更多信息,请参阅

文件和目录选择的GNU手册页 使用grep——exclude/——include语法在某些文件中不使用grep

对于较旧的GNU Greps和POSIX Grep,请按照其他答案中的建议使用find。

或者只是使用ack(编辑:或银色搜索者),并完成它!

这里已经给出了许多正确答案,但我添加这个答案是为了强调一个问题,这个问题之前导致了一些匆忙的尝试失败:exclude-dir采用模式,而不是目录的路径。

假设你的搜索是:

grep -r myobject

您会注意到,您的输出与src/other/objects-文件夹的结果混杂在一起。这个命令不会给你预期的结果:

grep -r myobject --exclude-dir=src/other/objects-folder

您可能想知道为什么exclude-dir不起作用!要从objects文件夹中排除结果,只需这样做:

grep -r myobject --exclude-dir=objects-folder

换句话说,只需使用文件夹名,而不是路径。一旦你知道了,这是显而易见的。

从手册页:

——exclude-dir =水珠 跳过任何名称后缀与模式GLOB匹配的命令行目录。当 递归搜索,跳过基名与GLOB匹配的任何子目录。忽略任何 GLOB中多余的尾随斜杠。

你可以试试grep -R搜索。| grep -v '^node_modules/.*'