当我使用grep
或 时find
,我总是被“权限被拒绝”和“没有这样的文件或目录”的通知所困扰,如下所示:
johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn
grep: ./lib/ufw/user6.rules: Permission denied
grep: ./lib/ufw/user.rules: Permission denied
grep: ./lib/init/rw/udev/watch/27: No such file or directory
grep: ./lib/init/rw/udev/watch/26: No such file or directory
grep: ./lib/init/rw/udev/watch/25: No such file or directory
我怎样才能避免它们,以便我只看到相关数据,即我真正寻找的东西?
答案1
使用 grep 你可以指定 -s 标志,它的作用与 @ortang 所说的基本相同
-s, --无消息 抑制有关不存在或不可读文件的错误消息。可移植性注意事项:与 GNU grep 不同,第 7 版 Unix grep 不符合 POSIX,因为它缺少 -q,并且其 -s 选项的行为类似于 GNU grep 的 -q 选项。USG 样式的 grep 也缺少 -q,但其 -s 选项的行为类似于 GNU grep。可移植的 shell 脚本应避免使用 -q 和 -s,而应将标准和错误输出重定向到 /dev/null。
据我所知,@ortangs 的答案是最好的。类似于
find / -name "myfile" -type f -print 2>/dev/null
答案2
尝试重定向stderr
至/dev/null
。
johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn
答案3
重定向strerr
至/dev/null
(又名black hole
) 是抑制权限被拒绝错误的好方法。
然而,请注意,这种伤害不仅会抑制permission denied
信息,而且全部错误信息。
如果您确实希望保留除此之外的错误信息,permission denied
您可以执行以下操作 -
grep -rnP 'YII_CORE_PATH' ./ 2>&1 | grep -v 'permission denied' > error.log
如果你不想保留这些,那么以下内容就可以了 -
grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn
答案4
在 grep -v 之前使用“|&”可以处理它,例如
grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn |& grep -v 'permission denied'