如何使用find + grep排除目录?

时间:2015-01-22 08:46:43

标签: bash shell grep directory find

在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的其他几个变种但没有成功。

如何排除多个目录和模式?

1 个答案:

答案 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