我需要从磁盘卷生成文件列表。某些目录(根目录下的所有隐藏目录)具有奇怪的权限,导致 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 或任何其他支持-readable
and-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
- 这在生成文件来读取文件时是不可避免的。