我想遍历所有子目录,除了“node_modules”目录。
当前回答
你可以试试grep -R搜索。| grep -v '^node_modules/.*'
其他回答
find . ! -name "node_modules" -type d
最新版本的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={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??'}
这个对我很有用:
grep <stuff> -R --exclude-dir=<your_dir>
一个更简单的方法是使用“grep -v”来过滤结果。
grep -v node_modules . grep -i needle -R * |