在 find 中本机丢弃“访问被拒绝”stderr

在 find 中本机丢弃“访问被拒绝”stderr

是否有一个选项find允许我抑制尝试访问我无权访问的目录时收到的错误消息?

我知道我可以放弃 stderr,但这似乎是一个明显的需要,以至于我不相信执行此操作的选项不存在,尽管我在文档中没有找到一个选项。

答案1

避免从 获取权限错误find,您必须避免引发这些错误。您可以通过避免输入不可访问的目录来做到这一点。

查找并显示当前用户无法读取的目录的路径名,但不要深入其中,GNUfind风格:

find / -type d ! -readable -prune

-prune操作从 的搜索路径中删除当前正在调查的路径名find

使用 standard find,您必须以复杂的方式组合-perm-user-group以根据目录的所有权测试每个目录的权限。我想我已经尝试过几次了,但是这很困难。

只关心“其他”权限位:

find / -type d ! -user "$(id -u)" ! -group "$(id -g)" ! -perm -005 -prune

这将找到不属于当前用户、不属于当前用户组、并且其权限位不允许“其他人”读取(列出)或执行(输入)它的任何目录,然后从搜索路径中删除这些目录。

完整的事情,测试所有的权限位,可能看起来像这样

find / -type d \( \(   -user "$(id -u)"                     ! -perm -500 \) -o \
                  \( ! -user "$(id -u)"   -group "$(id -g)" ! -perm -050 \) -o \
                  \( ! -user "$(id -u)" ! -group "$(id -g)" ! -perm -005 \) \) -prune

-readable这与GNU 的区别find在于-readable还考虑了 ACL 等。


丢弃来自 的权限错误find,将其标准错误流重定向到/dev/null

答案2

您不太可能找到许多具有抑制错误消息选项的命令(如果有的话)。这是因为丢弃是微不足道的标准错误具有诸如 之类的构造2>/dev/null

特别是,find本身就没有这样的选项。

相关内容