Grep:使用排除特定文件夹

时间:2010-05-09 21:28:13

标签: linux grep

假设我们的文件夹结构如下:

/app
/app/data
...
/app/secondary
/app/secondary/data

我想递归搜索/app/data,但我不想搜索/app/secondary/data

在app文件夹中,我的grep命令会是什么样的?

2 个答案:

答案 0 :(得分:13)

这样就可以了解

grep -r --exclude-dir='secondary/data' PATTERN data

答案 1 :(得分:6)

为什么接受的答案是错误的

@seamus接受的答案是错误的,因为grep -r --exclude-dir=<glob>匹配基本名称,根据定义,它不能包含斜杠(斜杠将其转换为无操作,因为没有基本名称会匹配)。

来自GNU Grep Manual

  

<强> - 排除-DIR =水珠

     

...在搜索递归时,跳过基本名称 glob 匹配的子目录...

为什么问题可能是错误的

我认为OP的目录结构并不能很好地解决问题,因为如果有人......

.
├── app
    ├── data
    └── secondary
        └── data

...当前目录为app,我们可以这样做:

> grep -r <search-pattern> data

它不会搜索secondary文件夹,因为它不在data内。

预期的问题可能是什么

给定具有嵌套data文件夹的目录结构如何查看顶级data但不在嵌套文件夹中。

.
└── data
    ├── file.txt
    ├── folder1
    │   └── folder2
    │       ├── data
    │       │   └── file.txt
    │       └── file.txt
    └── folder3
        ├── data
        │   └── file.txt
        └── file.txt

答案是什么

> grep -r --exclude-dir='data' <search-pattern> data/*

注意最后的*。如果省略,则不会搜索顶级data文件夹。