当前位置: 首页>>技术教程>>正文


linux – Ubuntu grep,查找等:“Permission denied”和“无此文件或目录”输出

, , , ,

问题描述

当我使用grepfind时,总是会被”Permission denied”和“没有这样的文件或目录”通知所烦扰,如下所示:

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

我怎样才能避免使用它们并做到这一点,以便仅看到相关数据,即我真正想要的数据?

最佳方法

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

-s, –no-messages Suppress error messages about nonexistent or unreadable files. Portability note: unlike GNU grep, 7th Edition Unix grep did not conform to POSIX, because it lacked -q and its -s option behaved like GNU grep’s -q option. USG-style grep also lacked -q but its -s option behaved like GNU grep. Portable shell scripts should avoid both -q and -s and should redirect standard and error output to /dev/null instead.

据我所知,@ortangs的答案是最好的。就像是

find / -name "myfile" -type f -print 2>/dev/null

次佳方法

尝试将stderr重定向到/dev/null

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

第三种方法

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

第四种方法

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

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/11172.html,未经允许,请勿转载。