我想遍历所有子目录,除了“node_modules”目录。
当前回答
非常有用,特别是对于那些处理Node.js时,我们希望避免在“node_modules”中搜索:
find ./ -not -path "*/node_modules/*" -name "*.js" | xargs grep keyword
其他回答
如果要排除多个目录:
"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}中的逗号后面添加空格
经常使用这个:
Grep可以与-r(递归),I(忽略大小写)和-o(只打印匹配的部分行)一起使用。要排除文件使用——exclude,要排除目录使用——exclude-dir。
把它们放在一起,你会得到这样的结果:
grep -rio --exclude={filenames comma separated} \
--exclude-dir={directory names comma separated} <search term> <location>
描述它让它听起来比实际复杂得多。用一个简单的例子来说明比较容易。
例子:
假设我在当前项目中搜索在调试会话期间显式设置字符串值调试器的所有位置,现在希望检查/删除。
我编写了一个名为findDebugger.sh的脚本,并使用grep查找所有事件。然而:
对于文件排除-我希望确保.eslintrc被忽略(这实际上有一个关于调试器的检测规则,所以应该被排除)。同样,我不希望在任何结果中引用我自己的脚本。
对于目录排除——我希望排除node_modules,因为它包含许多做引用调试器的库,我对这些结果不感兴趣。此外,我只是希望省略。idea和。git隐藏目录,因为我也不关心这些搜索位置,并希望保持搜索性能。
所以这是结果-我创建了一个名为findDebugger.sh的脚本:
#!/usr/bin/env bash
grep -rio --exclude={.eslintrc,findDebugger.sh} \
--exclude-dir={node_modules,.idea,.git} debugger .
如果你在git存储库中grep代码,而node_modules在你的.gitignore中,你可以使用git grep。Git grep在工作树中搜索被跟踪的文件,忽略来自.gitignore的所有文件
git grep "STUFF"
最新版本的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
推荐文章
- 如何重定向标准derr和标准输出到不同的文件在同一行脚本?
- Windows和Linux上的c++编译:ifdef开关
- 在Bash中获取日期(比当前时间早一天)
- Linux: kill后台任务
- 如何修改Linux系统中打开文件的数量限制?
- 在OSX中永久设置PATH环境变量
- PowerShell等价于grep -f
- errno线程安全吗?
- 如何在C程序中获取当前目录?
- 如何在Linux中永久导出变量?
- 如何在Bash中逐行合并两个文件
- 如何首次配置postgresql ?
- 检索Linux上单个进程的CPU使用情况和内存使用情况?
- 如何从远程SSH会话发送数据到本地剪贴板
- 我如何得到bash完成工作与别名?