Ubuntu grep,查找等:“权限被拒绝”和“无此类文件或目录”输出


17

当我使用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

我如何才能避免使用它们并使其成为仅显示相关数据,即我真正想要的东西?


Answers:


24

使用grep,您可以指定-s标志,它几乎完成了@ortang所说的

-s,--no-messages 禁止显示有关不存在或不可读文件的错误消息。可移植性说明:与GNU grep不同,第七版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


6

尝试重定向stderr/dev/null

johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn

5

将重定向strerr/dev/null(aka 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

1
您不能grep已经重定向到/ dev / null的内容。
choroba 2012年

@choroba已更正答案。打算写2>&1而不是2> /dev/null第一个建议。
jaypal singh

是的,您必须先重定向stderrstout
ortang 2012年

3
johndoe@johndoe-desktop:/$ sudo grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn

使用sudo命令将命令提升为具有管理特权。


0

在grep -v之前使用“ |&”将对其进行处理,例如

grep -rnP 'YII_CORE_PATH' ./ | grep -v .svn |& grep -v 'permission denied'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.