Ubuntu grep,查找等:“权限被拒绝”和“没有这样的文件或目录”输出

Vad*_*hin 18 linux bash grep find ubuntu

当我使用grepor 时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
Run Code Online (Sandbox Code Playgroud)

我怎样才能避免它们并使它只看到相关数据,即我真正在寻找的东西?

mat*_*hew 26

使用 grep,您可以指定 -s 标志,这与@ortang 所说的差不多

-s, --no-messages 抑制关于不存在或不可读文件的错误消息。可移植性说明:与 GNU grep 不同,第 7 版 Unix grep 不符合 POSIX,因为它缺少 -q 并且其 -s 选项的行为类似于 GNU grep 的 -q 选项。USG 风格的 grep 也没有 -q 但它的 -s 选项表现得像 GNU grep。可移植的 shell 脚本应该避免 -q 和 -s 并且应该将标准和错误输出重定向到 /dev/null。

据我所知,用 find 回答@ortangs 是最好的。就像是

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


ort*_*ang 6

尝试重定向stderr/dev/null.

johndoe@johndoe-desktop:/$ grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn
Run Code Online (Sandbox Code Playgroud)


jay*_*ngh 5

重定向strerr/dev/null(又名black hole)是抑制权限被拒绝错误的好方法。

但是,请注意,此伤口不仅会抑制permission denied消息,还会抑制所有错误消息。

如果您确实希望保留除此之外的错误消息,permission denied您可以执行以下操作 -

grep -rnP 'YII_CORE_PATH' ./ 2>&1 | grep -v 'permission denied' > error.log
Run Code Online (Sandbox Code Playgroud)

如果您不想保留这些,那么以下内容就可以了-

grep -rnP 'YII_CORE_PATH' ./ 2> /dev/null | grep -v .svn
Run Code Online (Sandbox Code Playgroud)