我正在使用find "/home/../.." -type f -not -path "*/FolderName/*"忽略
列出的FolderName。但是,我读到find仍然遍历此FolderName。使用上层命令搜索此文件夹中的文件没有列出任何文件,因此我不确定该文件夹是否仍在被遍历。-prune据说真的会忽略文件夹被遍历,但我不确定是否-prune真的需要?
在-depth(与-delete暗示-depth)-prune,-maxdepth <n>,-depth [+-]<n>,-follow(现在替换为-L选项)-quit,-exit,-xdev/-mount谓词(并非所有的实现支持所有的)是影响目录遍历唯一的。
在这里,而不是
... ! -path '*/whatever/*' ...
Run Code Online (Sandbox Code Playgroud)
你可以做:
... \( ! -name whatever -o -prune \) ...
Run Code Online (Sandbox Code Playgroud)
或者,如果您还想排除whatever自己(! -path '*/whatever/*'不排除):
... -name whatever -prune -o \( ... \)
Run Code Online (Sandbox Code Playgroud)
这些必须插入在谓词之前,例如-type f.
这也避免了*不匹配在某些语言环境和某些实现(如find最常见语言环境中的GNU)中不转换为字符的字节序列的问题。
所以对于你的例子:
find "/home/../.." \( ! -name FolderName -o -prune \) -type f -print
Run Code Online (Sandbox Code Playgroud)
或者:
find "/home/../.." -name FolderName -prune -o \( -type f -print \)
Run Code Online (Sandbox Code Playgroud)
(请注意,它排除了所有被调用的文件,FolderName即使是那些不是目录类型的文件)。