如果使用“-not -path“*/FolderName/*””,“查找”是否会遍历目录?

如果使用“-not -path“*/FolderName/*””,“查找”是否会遍历目录?

我习惯find "/home/../.." -type f -not -path "*/FolderName/*"忽略 文件夹名称从被列入。然而,我读到find仍然遍历这个文件夹名称。使用上面的命令搜索此文件夹中的文件没有列出任何文件,因此我不确定该文件夹是否仍在遍历。-prune据说确实忽略了被遍历的文件夹,但我不确定是否-prune真的需要?

答案1

-depth-delete暗示-depth)、-prune-maxdepth <n>-depth [+-]<n>-follow(现在替换为-L选项)、-quit-exit-xdev/-mount谓词(并非所有实现都支持所有这些)是唯一影响目录遍历的谓词。

在这里,而不是

... ! -path '*/whatever/*' ...

你可以做:

... \( ! -name whatever -o -prune \) ...

或者如果你还想排除whatever它自己(但这! -path '*/whatever/*'并不行):

... -name whatever -prune -o \( ... \)

那些必须插入谓词如-type f.

这也避免了在某些语言环境和某些实现(如大多数常见语言环境中的*GNU)中不转换为字符的字节序列不匹配的问题。find

所以对于你的例子:

find "/home/../.."  \( ! -name FolderName -o -prune \) -type f -print

或者:

find "/home/../.." -name FolderName -prune -o \( -type f -print \)

(请注意,它排除了所有名为的文件FolderName,甚至那些不是类型的文件目录)。

答案2

是的。

find将输入并遍历给定路径下的所有内容,即使该路径已使用-not -path或过滤掉! -path

这是因为-path谓词不会影响遍历find。它仅影响对找到的路径名的过滤。

要阻止find下降到特定路径,请-prune改为使用。

相关内容