在find命令中的排除机制

3

我使用以下bash脚本在文件中查找字符串:

find $1 -name "$2" -exec grep -Hn "$3" {} \;

有时候这个脚本会失败。
grep: /proc/sysrq-trigger: Input/Output error

为了解决这个问题,我首先想要从查找结果中排除这个文件。这是一个好主意吗?如果是,我该如何做到这一点?还有其他的解决方案可以避免我的脚本失败吗?
2个回答

4
您可以像这样在查找中排除所有/proc目录:
find $1 -path /proc -prune -o -name "$2" -print -exec grep -Hn "$3" {} \;

2
你遇到的问题是,--exclude-dir 是设计用于在 grep 自身执行文件系统递归(grep -r)时工作的,而不是在使用 find 时。为什么不与 xargs 结合使用,并使用另一个 grep 过滤掉 proc 条目呢?
find $1 -name "$2" | grep -v '/proc' | xargs grep -Hn "$3" {} \;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接