在Bash中,我试图在多个分散的文件中找到一个字符串。
我从grep access / sys获得了数以千计的错误,我试图将其排除在外:
find / -type f ! -path "/sys" -exec grep -l StringToFind {} \;
find / -type f -exec grep -l --exclude-dir="/sys" StringToFind {} \;
有人可以解释为什么上述两种方法都无效吗? 我尝试了grep -v和egrep的其他几个变种但没有成功。
如何排除多个目录和模式?
答案 0 :(得分:0)
存在一些问题
-path "/sys"
find
的绝对路径,这对于确切的目录(或文件)/sys
是唯一的,对于任何子目录都不是。如果您希望/sys
以下的任何内容都适用,那么它应该是-path "/sys/*"
或! -path "/sys" ! -path "/sys/*
(对于两者而言)-path
不会阻止-find
遍历目录,因此您仍然可以获取其下方文件的错误尝试
find / -path "/sys" -prune -o -type f -exec grep -l StringToFind {} +
或者更好(你的--exclude-dir
由于类似的原因而失败-find
,因为它是非递归的,你只是只包含确切的参数/sys
- {{1}永远不会传递给它)
find