是否有一个选项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
本身就没有这样的选项。