取出“拒绝访问”行

sol*_*ish 9 command-line bash find

当我find用来查看目录中的所有 pdf 文件时/home,我看到的是access denied. 为了消除它们,我尝试过:

find /home -iname "*.pdf" | grep -v "access denied"
Run Code Online (Sandbox Code Playgroud)

然而,结果是一样的。我怎样才能摆脱这些线?

Zan*_*nna 19

您尝试的方法无效,因为access denied输出是错误并在 STDERR 上发送,而不是通过管道传输到grep.

您可以通过仅重定向 STDERR 来避免看到这些错误

find /home -iname "*.pdf" 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

或者正如David Foerster 评论的那样,我们可以更简洁地关闭STDERR

find /home -iname "*.pdf" 2>&-
Run Code Online (Sandbox Code Playgroud)

但是,我怀疑您实际上只想搜索您的家而不是其他用户的,所以也许您真的想要

find ~ -iname "*.pdf"
Run Code Online (Sandbox Code Playgroud)

如果这引发错误,则您的本地配置中可能存在一些错误的所有权,您应该进行调查。

  • Grrr,为什么人们总是比我快 30 秒?:\ (3认同)
  • @solfish 据我所知,这些文件应该归您所有。你可能想要`sudo chown $USER: ~/.gvfs ~/.dbus` (2认同)

You*_*Git 8

访问被拒绝可能打印在stderr而不是stdout

尝试这个:

find /home -iname "*.pdf" 2>&1 | grep -v "access denied"
Run Code Online (Sandbox Code Playgroud)

2>&1重定向从输出stderrstdout,这样grep -v可以做自己的工作。(默认情况下,|只有管​​道stdout而不是stderr。)