在 Linux 中运行 find 时如何跳过“权限被拒绝”错误?

use*_*818 191 linux permissions find files

可能的重复:
如何从查找程序中删除“权限被拒绝”打印输出语句?

当我在 Linux (SuSE) 中运行此命令时:

find / -name ant
Run Code Online (Sandbox Code Playgroud)

我收到许多形式的错误消息:

find: `/etc/cups/ssl': Permission denied
Run Code Online (Sandbox Code Playgroud)

是否find需要跳过显示这些错误并仅尝试我有权访问的文件的参数?

Lev*_*von 248

您可以将消息过滤到stderr. 我更喜欢重定向他们stdout喜欢这个。

 find / -name art  2>&1 | grep -v "Permission denied"
Run Code Online (Sandbox Code Playgroud)

说明

简而言之,所有常规输出都转到标准输出 ( stdout)。标准错误 ( stderr) 的所有错误消息。

grep通常查找/打印指定的字符串,将其-v反转,因此它查找/打印每个包含“权限被拒绝”的字符串。find 命令的所有输出,包括通常发送到stderr(文件描述符 2)的错误消息,现在转到stdout(文件描述符 1),然后由grep命令过滤。

这假设您正在使用bash/shshell。

tcsh/csh你会使用

 find / -name art |& grep ....
Run Code Online (Sandbox Code Playgroud)

  • 甚至只是`find / -name art 2>/dev/null` (122认同)
  • @rush 这将过滤掉所有错误消息,而不仅仅是权限被拒绝的消息 (30认同)
  • 当我使用 `find 2>/dev/null` 时,我总是只需要结果集而不需要任何其他错误消息。当结果集返回 `null` 时,我只需运行“常规”`find` 并找出问题所在。 (8认同)
  • 想想看,这就是所有 find *CAN* 作为错误消息返回的内容。磁盘已满,磁盘读取错误,......可能,但很少见,并且 find 不适合处理这些。如果这些错误仍然出现,您还有其他问题。Find 自己的错误结果甚至含糊不清.. 0=好,!0=发生了一些事情。除了通过/失败之外,甚至没有真正区分任何东西。 (4认同)
  • 我同意@MichaelMrozek,我宁愿看到所有可能的错误消息,然后决定将它们过滤掉,而不是将它们发送到看不见的位桶中。 (2认同)