我想遍历所有子目录,除了“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 .
你可以试试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(编辑:或银色搜索者),并完成它!
非常有用,特别是对于那些处理Node.js时,我们希望避免在“node_modules”中搜索:
find ./ -not -path "*/node_modules/*" -name "*.js" | xargs grep keyword
推荐文章
- fork(), vfork(), exec()和clone()的区别
- 在tmux中保持窗口名称固定
- 如何生成一个核心转储在Linux上的分段错误?
- 在Python中如何在Linux和Windows中使用“/”(目录分隔符)?
- 使用sh shell比较字符串
- 只列出UNIX中的目录
- 如何在Apache服务器上自动将HTTP重定向到HTTPS ?
- 如何限制从grep返回的结果的数量?
- 将值从管道读入shell变量
- 如何管道列表的文件返回的找到命令到猫查看所有文件
- 以相对于当前目录的路径递归地在Linux CLI中列出文件
- 如何使用xargs复制名称中有空格和引号的文件?
- 在makefile中抑制命令调用的回声?
- 在套接字编程中AF_INET和PF_INET的区别是什么?
- Shell脚本for循环语法