我想遍历所有子目录,除了“node_modules”目录。
当前回答
这个对我很有用:
grep <stuff> -R --exclude-dir=<your_dir>
其他回答
最新版本的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中多余的尾随斜杠。
find . ! -name "node_modules" -type d
步骤1:
vim ~ / . bash_profile
search() {
grep -InH -r --exclude-dir=*build* -e "$1" .
}
步骤2:
源~ / . bash_profile
用法:
搜索”< string_to_be_searched >”
如果你在git存储库中grep代码,而node_modules在你的.gitignore中,你可以使用git grep。Git grep在工作树中搜索被跟踪的文件,忽略来自.gitignore的所有文件
git grep "STUFF"