我想遍历所有子目录,除了“node_modules”目录。
当前回答
你可以试试grep -R搜索。| grep -v '^node_modules/.*'
其他回答
最新版本的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(编辑:或银色搜索者),并完成它!
find . ! -name "node_modules" -type d
非常有用,特别是对于那些处理Node.js时,我们希望避免在“node_modules”中搜索:
find ./ -not -path "*/node_modules/*" -name "*.js" | xargs grep keyword
这个对我很有用:
grep <stuff> -R --exclude-dir=<your_dir>
解决方案1(结合find和grep)
此解决方案的目的不是处理grep性能,而是展示一个可移植的解决方案:应该也适用于busybox或大于2.5的GNU版本。
使用find排除foo和bar目录:
find /dir \( -name foo -prune \) -o \( -name bar -prune \) -o -name "*.sh" -print
然后结合find和grep的非递归使用,作为一个可移植的解决方案:
find /dir \( -name node_modules -prune \) -o -name "*.sh" -exec grep --color -Hn "your text to find" {} 2>/dev/null \;
解决方案2(使用grep的——exclude-dir选项):
你已经知道这个解了,但我加上它,因为它是最新的和有效的解。注意,这是一个不太可移植的解决方案,但更适合人类阅读。
grep -R --exclude-dir=node_modules 'some pattern' /path/to/search
要排除多个目录,使用——exclude-dir as:
——exclude-dir = {node_modules, dir1 dir2, dir3}
方案3(银)
如果你经常在代码中搜索,Ag(银色搜索器)是一个比grep更快的替代品,它是为搜索代码而定制的。例如,它会自动忽略.gitignore中列出的文件和目录,因此您不必一直向grep或find传递同样麻烦的排除选项。
推荐文章
- 如何重定向标准derr和标准输出到不同的文件在同一行脚本?
- Windows和Linux上的c++编译:ifdef开关
- 在Bash中获取日期(比当前时间早一天)
- Linux: kill后台任务
- 如何修改Linux系统中打开文件的数量限制?
- 在OSX中永久设置PATH环境变量
- PowerShell等价于grep -f
- errno线程安全吗?
- 如何在C程序中获取当前目录?
- 如何在Linux中永久导出变量?
- 如何在Bash中逐行合并两个文件
- 如何首次配置postgresql ?
- 检索Linux上单个进程的CPU使用情况和内存使用情况?
- 如何从远程SSH会话发送数据到本地剪贴板
- 我如何得到bash完成工作与别名?