我想遍历所有子目录,除了“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 * |