我需要从磁盘卷生成文件列表。一些目录(根目录下的所有隐藏目录)具有奇怪的权限,导致 find 抱怨。
我尝试排除所有这些路径,但一个目录仍然抱怨:
find . -type f -not -path './.*/*'
find: ./.DocumentRevisions-V100: Permission denied
Run Code Online (Sandbox Code Playgroud)
权限是这样的(由操作系统设置,所以我认为它们不应该被弄乱)。
d--x--x--x root wheel .DocumentRevisions-V100
Run Code Online (Sandbox Code Playgroud)
如何更改find
语句以有效地省略所有隐藏目录,以免抱怨。(我不想这样做,2>/dev/null
因为我想了解其他问题)。
使用 GNU find 或任何其他支持-readable
和-executable
谓词的find :
find . -type d ! \( -readable -executable \) -prune -o -type f -not -path './.*/*' -print
Run Code Online (Sandbox Code Playgroud)
首先,我们修剪不可遍历的目录。如果该条件不适用,请尝试其他条件。
如果您find
没有这些选项,您可以匹配文件权限。
find . -type d ! -perm -u+rx -prune -o -type f ! -path './.*/*' -print
Run Code Online (Sandbox Code Playgroud)
find 的语法确实是一头奇怪的野兽。我认为你可能会成功
find . -path './.*' -prune -o -type f -print
Run Code Online (Sandbox Code Playgroud)
根据find(1) 手册页:
要忽略整个目录树,请使用 -prune 而不是检查树中的每个文件。例如,要跳过目录“src/emacs”及其下的所有文件和目录,并打印找到的其他文件的名称,请执行以下操作:
find . -path ./src/emacs -prune -o -print
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2114 次 |
最近记录: |