如果使用 '-not -path "*/FolderName/*" ','find' 是否遍历目录?

lin*_*ser 5 command-line find

我正在使用find "/home/../.." -type f -not -path "*/FolderName/*"忽略 列出的FolderName。但是,我读到find仍然遍历此FolderName。使用上层命令搜索此文件夹中的文件没有列出任何文件,因此我不确定该文件夹是否仍在被遍历。-prune据说真的会忽略文件夹被遍历,但我不确定是否-prune真的需要?

Sté*_*las 5

-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即使是那些不是目录类型的文件)。