排除使 find 抱怨权限的路径

排除使 find 抱怨权限的路径

我需要从磁盘卷生成文件列表。某些目录(根目录下的所有隐藏目录)具有奇怪的权限,导致 find 抱怨。

我尝试排除所有这些路径,但一个目录仍然抱怨:

find . -type f -not -path './.*/*'
find: ./.DocumentRevisions-V100: Permission denied

权限是这样的(由操作系统设置,所以我认为它们不应该被弄乱)。

d--x--x--x root  wheel   .DocumentRevisions-V100

我如何更改find语句以有效地省略所有隐藏目录以免抱怨。 (我不想像2>/dev/null我想知道其他问题那样做)。

答案1

使用 GNU find 或任何其他支持-readableand-executable谓词的 find:

find . -type d ! \( -readable -executable \) -prune -o -type f -not -path './.*/*' -print

首先,我们修剪不可遍历的目录。如果该条件不适用,请尝试其他条件。

如果您find没有这些选项,您可以匹配文件权限。

find . -type d ! -perm -u+rx -prune -o -type f ! -path './.*/*' -print

答案2

find 的语法确实是一头奇怪的野兽。我认为你可能会成功

find . -path './.*' -prune -o -type f -print

根据查找(1) 手册页:

要忽略整个目录树,请使用 -prune 而不是检查树中的每个文件。例如,要跳过目录“src/emacs”及其下的所有文件和目录,并打印找到的其他文件的名称,请执行以下操作:

find . -path ./src/emacs -prune -o -print

答案3

u='-user "$USER"'
g='\('$(IFS=\ ;printf " -group %d " $(id -G))'\)'
eval "find / $u \( -perm -u=rx -o -prune \) -o \
             $g \( -perm -g=rx -o -prune \) -o \
                   -perm -o=rx -o -prune" | wc -l

这样可行。由于文件权限始终在尽可能最具体的级别进行评估,因此您不必-o担心很多。如果某个文件由某个用户拥有,并且其他人和组可以读取,但所有者不能读取该文件,那么某个用户仍然无法读取该文件。因此,您只需要从最具体的权限匹配开始,-pruning然后一直从那里开始。


find: `/proc/3379/task/3379/fd/5': No such file or directory
find: `/proc/3379/task/3379/fd/5': No such file or directory
find: `/proc/3379/task/3379/fd/5': No such file or directory
find: `/proc/3379/task/3379/fd/5': No such file or directory
find: `/proc/3379/task/3379/fdinfo/5': No such file or directory
find: `/proc/3379/task/3379/fdinfo/5': No such file or directory
find: `/proc/3379/task/3379/fdinfo/5': No such file or directory
find: `/proc/3379/task/3379/fdinfo/5': No such file or directory
find: `/proc/3379/fd/5': No such file or directory
find: `/proc/3379/fd/5': No such file or directory
find: `/proc/3379/fd/5': No such file or directory
find: `/proc/3379/fd/5': No such file or directory
find: `/proc/3379/fdinfo/5': No such file or directory
find: `/proc/3379/fdinfo/5': No such file or directory
find: `/proc/3379/fdinfo/5': No such file or directory
find: `/proc/3379/fdinfo/5': No such file or directory
327652

正如您所看到的,在任何时候都不存在权限问题,只是偶尔会出现一些竞争问题/proc- 这在生成文件来读取文件时是不可避免的。

相关内容