我想告诉您grep
,在 Debian 上,不要搜索/proc
或中的文件/sys
。但如果我使用:
--exclude-dir=/proc
或者
--exclude-dir={/proc,/sys}
或者
--exclude-dir=/proc --exclude-dir=/sys
然后grep
仍然阅读/sys
并因此崩溃。那么我怎样才能告诉grep
跳过/proc
和/sys
目录呢?
答案1
--exclude-dir
GNU 手册中的文档grep
说
--exclude-dir=GLOB
跳过名称后缀与模式匹配的任何命令行目录
GLOB
。递归搜索时,跳过基本名称与匹配的任何子目录GLOB
。忽略中任何多余的尾随斜杠GLOB
。
正如您所看到的,给定的模式 ( GLOB
) 将仅应用于目录的实际文件名,并且由于目录名称不能包含/
在其名称中,因此类似的模式/proc
永远不会匹配。
因此,您必须使用--exclude-dir=proc
and --exclude-dir=sys
(或者--exclude-dir={proc,sys}
如果您时间不够),同时要注意,这不仅会跳过/proc
and /sys
,还会跳过任何其他具有这些名称之一的目录。
另一种从根向下递归搜索完整目录树同时避免这两个目录的方法是使用grep
from 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/} /