问题描述
当我使用grep
或find
时,总是会被”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
命令将命令提升为具有管理特权。