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

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

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

相关内容