我想遍历所有子目录,除了“node_modules”目录。
当前回答
一个更简单的方法是使用“grep -v”来过滤结果。
grep -v node_modules . grep -i needle -R * |
其他回答
一个更简单的方法是使用“grep -v”来过滤结果。
grep -v node_modules . grep -i needle -R * |
如果你在git存储库中grep代码,而node_modules在你的.gitignore中,你可以使用git grep。Git grep在工作树中搜索被跟踪的文件,忽略来自.gitignore的所有文件
git grep "STUFF"
这个语法
--exclude-dir={dir1,dir2}
被shell(例如Bash)而不是grep扩展为:
--exclude-dir=dir1 --exclude-dir=dir2
引用将阻止shell扩展它,所以这将不起作用:
--exclude-dir='{dir1,dir2}' <-- this won't work
与——exclude-dir一起使用的模式与——exclude选项手册页中描述的模式相同:
--exclude=GLOB
Skip files whose base name matches GLOB (using wildcard matching).
A file-name glob can use *, ?, and [...] as wildcards, and \ to
quote a wildcard or backslash character literally.
shell通常会尝试自己展开这样的模式,所以为了避免这种情况,你应该引用它:
--exclude-dir='dir?'
你可以像这样一起使用大括号和引号排除模式:
--exclude-dir={'dir?','dir??'}
步骤1:
vim ~ / . bash_profile
search() {
grep -InH -r --exclude-dir=*build* -e "$1" .
}
步骤2:
源~ / . bash_profile
用法:
搜索”< string_to_be_searched >”
如果要排除多个目录:
"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}中的逗号后面添加空格