grep: --exclude-dir 不起作用

grep: --exclude-dir 不起作用

我想告诉您grep,在 Debian 上,不要搜索/proc或中的文件/sys。但如果我使用:

 --exclude-dir=/proc

或者

--exclude-dir={/proc,/sys}

或者

--exclude-dir=/proc --exclude-dir=/sys

然后grep仍然阅读/sys并因此崩溃。那么我怎样才能告诉grep跳过/proc/sys目录呢?

答案1

--exclude-dirGNU 手册中的文档grep

--exclude-dir=GLOB

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

正如您所看到的,给定的模式 ( GLOB) 将仅应用于目录的实际文件名,并且由于目录名称不能包含/在其名称中,因此类似的模式/proc永远不会匹配。

因此,您必须使用--exclude-dir=procand --exclude-dir=sys(或者--exclude-dir={proc,sys}如果您时间不够),同时要注意,这不仅会跳过/procand /sys,还会跳过任何其他具有这些名称之一的目录。

另一种从根向下递归搜索完整目录树同时避免这两个目录的方法是使用grepfrom find

find / \( -type d \( -path /proc -o -path /sys \) -prune \) -o \
    -type f -exec grep 'PATTERN' {} +

这将检测到两个具体的目录/proc/sys并停止find进入其中。它还会grep一次尽可能大批量地提供任何找到的常规文件。

答案2

不过,这效果很好!

 --exclude-dir={proc,sys} 

答案3

您必须知道 grep 会将所选目录作为搜索中文件名的基础,因为在搜索列表中它们将显示为 dev/、sys/ 等,因此不要使用:

grep 'yourstring' -R --exclude-dir={/dev,/sys,/proc} / 

您必须使用:

grep 'yourstring '-R --exclude-dir={dev/,sys/,proc/} /

相关内容