我想遍历所有子目录,但“node_modules”目录除外。


#1楼

一种更简单的方法是使用“grep -v”过滤结果。

grep -i needle -R * | grep -v node_modules


#2楼

非常有用,特别是对于那些我们想要避免在“node_modules”内搜索的Node.js的人 :

find ./ -not -path "*/node_modules/*" -name "*.js" | xargs grep keyword

#3楼

如果要排除多个目录:

“r”表示递归,“l”表示仅包含匹配的文件名和“i”表示忽略大小写区别:

grep -rli --exclude-dir={dir1,dir2,dir3} keyword /path/to/search

示例:我想查找包含“hello”一词的文件。 我想搜索 proc目录, 启动目录, sys目录和目录之外的所有linux目录:

grep -rli --exclude-dir={proc,boot,root,sys} hello /

注意:上面的示例需要是root

注2(根据@skplunkerin):不要在 {dir1,dir2,dir3} 的逗号后添加空格


#4楼

经常使用这个:

grep可以与-r (递归), i (忽略大小写)和-o (仅打印匹配的行的一部分)一起使用。 要排除files使用--exclude和排除目录使用--exclude-dir

把它放在一起你会得到类似的东西:

grep -rio --exclude={filenames comma separated} \
--exclude-dir={directory names comma separated} <search term> <location>

描述它使它听起来比实际复杂得多。 用一个简单的例子更容易说明。

例:

假设我正在为调试会话期间显式设置字符串值debugger所有地方搜索当前项目,现在希望查看/删除。

我编写了一个名为findDebugger.sh的脚本,并使用grep查找所有出现的内容。 然而:

对于文件排除 - 我希望确保忽略.eslintrc (这实际上有一个关于debugger的linting规则,所以应该被排除)。 同样,我不希望在任何结果中引用我自己的脚本。

对于目录排除 - 我希望排除node_modules因为它包含许多引用debugger的库,我对这些结果不感兴趣。 另外我只想省略.idea.git隐藏目录,因为我也不关心那些搜索位置,并希望保持搜索性能。

所以这是结果 - 我创建了一个名为findDebugger.sh的脚本:

#!/usr/bin/env bash
grep -rio --exclude={.eslintrc,findDebugger.sh} \
--exclude-dir={node_modules,.idea,.git} debugger .

#5楼

一个简单的工作命令:

root/dspace# grep -r --exclude-dir={log,assetstore} "creativecommons.org"

上面我在当前目录“dspace”中找到文本“creativecommons.org”并排除dirs {log,assetstore}。

完成。


#6楼

这个对我有用

grep <stuff> -R --exclude-dir=<your_dir>


#7楼

这个语法

--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=GLOBSkip files whose base name matches GLOB (using wildcard matching).A file-name glob can use *, ?, and [...]  as wildcards, and \ toquote a wildcard or backslash character literally.

shell通常会尝试自己扩展这样的模式,所以为了避免这种情况,你应该引用它:

--exclude-dir='dir?'

您可以像这样使用花括号和引用排除模式:

--exclude-dir={'dir?','dir??'}

模式可以跨越多个路径段:

--exclude-dir='some*/?lse'

这将排除像topdir/something/else这样的topdir/something/else


#8楼

如果您正在使用git存储库中的代码,而node_modules位于.gitignore ,则可以使用git grepgit grep搜索工作树中的跟踪文件,忽略.gitignore所有内容

git grep "STUFF"

#9楼

这里给出了许多正确的答案,但是我正在添加这一点以强调一点,这导致一些匆忙的尝试失败: exclude-dir采用模式 ,而不是目录的路径。

说你的搜索是:

grep -r myobject

并且您注意到您的输出与src/other/objects-folder结果混杂在一起。 此命令不会给您预期的结果:

grep -r myobject --exclude-dir=src/other/objects-folder

你可能想知道为什么exclude-dir不起作用! 要实际排除objects-folder结果,只需执行以下操作:

grep -r myobject --exclude-dir=objects-folder

换句话说,只使用文件夹名称 ,而不是路径。 一旦你知道它就明显了。

从手册页:

--exclude-DIR = GLOB
跳过任何名称后缀与模式GLOB匹配的命令行目录。 在递归搜索时,跳过任何基本名称与GLOB匹配的子目录。 忽略GLOB中的任何冗余尾部斜杠。


#10楼

你可以尝试类似grep -R search . | grep -v '^node_modules/.*'东西grep -R search . | grep -v '^node_modules/.*' grep -R search . | grep -v '^node_modules/.*'


#11楼

解决方案1(结合findgrep

此解决方案的目的不是处理grep性能而是显示可移植解决方案:还应该使用busybox或早于2.5的GNU版本。

使用find ,排除目录foo和bar:

find /dir \( -name foo -prune \) -o \( -name bar -prune \) -o -name "*.sh" -print

然后结合使用grep find和非递归使用,作为便携式解决方案:

find /dir \( -name node_modules -prune \) -o -name "*.sh" -exec grep --color -Hn "your text to find" {} 2>/dev/null \;

解决方案2(递归使用grep ):

您已经知道了这个解决方案,但我添加它,因为它是最新且最有效的解决方案。 请注意,这是一种不太便携的解决方案,但更具人性化。

grep -R --exclude-dir=node_modules 'some pattern' /path/to/search

要排除多个目录,请使用--exclude-dir as:

--exclude-dir={node_modules,dir1,dir2,dir3}

解决方案3(Ag)

如果你经常搜索代码, Ag(The Silver Searcher)是一个比grep更快的替代品,它是为搜索代码而定制的。 例如,它会自动忽略.gitignore列出的文件和目录,因此您不必继续将相同的繁琐排除选项传递给grepfind


#12楼

find . ! -name "node_modules" -type d

#13楼

最新版本的GNU Grep (> = 2.5.2 )提供:

--exclude-dir=dir

不包括目录模式匹配的dir由递归目录搜索。

所以你可以这样做:

grep -R --exclude-dir=node_modules 'some pattern' /path/to/search

有关语法和用法的更多信息,请参阅

  • 文件和目录选择的GNU手册页
  • 相关的StackOverflow答案使用grep --exclude / - include语法不要浏览某些文件

对于较旧的GNU Greps和POSIX Grep ,请按照其他答案中的建议使用find

或者只使用ack编辑 :或银色搜索者 )并完成它!

如何从grep -R中排除目录?相关推荐

  1. linux++tar打包目录,linux中tar命令打包目录与排除目录打包linux操作系统 -电脑资料...

    本文章来给各位朋友详细介绍关于linux中tar命令打包目录与排除目录打包有需要了解tar命令的使用方法的朋友可进行参考参考, 打包压缩目录很简单如下代码如下复制代码 tar -czf small.t ...

  2. grep -R 关键字 目录

    grep -R  "关键字"  目录 转载于:https://www.cnblogs.com/seasonsstory/p/3447380.html

  3. linux rsync排除目录,如何从rsync中排除文件夹

    问题描述 我正在尝试在我的NAS驱动器上备份我的主文件夹.我这样说: rsync -Paz --exclude-from 'rsync-exclude.txt' /home/chris/ admin@ ...

  4. linux grep 排除_如何在Linux中排除Grep?

    linux grep 排除 grep is very useful tool used by a lot of tech guys. grep provides different functions ...

  5. grep如何忽略.svn目录,以及如何忽略多个目录

    grep如何忽略.svn目录,以及如何忽略多个目录 这是我在网上看到的文章,不过里面还有问题,我的不支持,需要更换架包 grep -r 'function_name' * (*表示当前目录下所有文件, ...

  6. Linux中的目录和文件管理

    Linux中的目录和文件管理 1:Linux的命令分类:内部命令和外部命令 内部命令属于shell解释器的一部分 外部命令是独立于shell解释器之外的程序文件 2:Linux命令的通用格式 命令字  ...

  7. linux复制文件跳过相同,Linux中拷贝目录跳过指定文件的方法

    近日在 Linux 环境中做版本迁移的时候遇到一个问题:需要将一个目录遍历拷贝到另一个目录中,但需要忽略其中的某些文件,由于目录中东西比较多,忽略的项也不好一一指定.普通的 cp 命令并没有排除某个文 ...

  8. [Linux] Linux中/tmp目录下文件莫名丢失

    0x0 前言 前段时间的一个项目需要调用tomcat,没在意这些就把tomcat布在了/tmp下,大概1-2周左右,发现tomcat中的主程序和其他目录丢失,导致tomcat起不来,查看系统日志和to ...

  9. R语言笔记6:在R中写一些简单的函数、functions基础和作用域

    R语言基础系列: 1数据类型(向量.数组.矩阵. 列表和数据框) 2读写数据所需的主要函数.与外部环境交互 3数据筛选--提取对象的子集 4向量.矩阵的数学运算 5控制结构 Your first R ...

最新文章

  1. 刷新系统托盘(清除死掉的图标)修正版
  2. 又一本 Go 语言力作出版了
  3. php内置类,yii2学习教程之5种内置行为类详解
  4. Windows Server 2008 R2中的托管服务帐号(MSA)-冯立亮
  5. javascript---001-运行原理01_前端三大技术_JS重要性_Atwood定律_JS应用_JS让人迷惑_TypeScript会取代JS吗_JS是一门编程语言_浏览器工作原理_浏览器内核
  6. 大数据分析必须要会的python函数操作!!!
  7. 大数据之-Hadoop伪分布式_配置历史服务器---大数据之hadoop工作笔记0027
  8. 7-模块开发卷宗(GB8567——88)
  9. jquery position
  10. 【数学建模】模糊综合评价模型
  11. 使用Excel办公,你必须学会的文件加密、单元格锁定、复制可见单元格
  12. 5G到底有多快?和4G相比的直接数据给你更直观感受
  13. 常见开源规则引擎对比分析
  14. python百度ai文字识别、不精确、进行处理,python利用百度AI实现文字识别功能
  15. python定向爬取淘宝中商品的名称和价格
  16. nokia手机的含义
  17. Chrome 开发者工具新功能-网络面板新增载荷(Payload)边栏
  18. 大型数据中心维保外包模式的选择
  19. <img>标签中alt属性和title属性的区别
  20. Node.js TLS/SSL

热门文章

  1. 算法----返回Excel相应的列序号
  2. 【剑指offer-Java版】38数字在排序数组中出现的次数
  3. sql语句中 时间数值转换为时间格式函数
  4. 设置EditText自动获取焦点并弹出输入法
  5. Android之SimpleAdapter使用
  6. Kafka如何对Topic元数据进行细粒度的懒加载、同步等待?
  7. (0087)iOS开发之NSString属性为什么要用copy来修饰?
  8. swift_046(Swift map,filter, reduce方法)
  9. jmeter csv参数化_jmeter学习(二)
  10. uniapp定义全局变量方法