一尘不染

find中的-prune选项有什么作用?

linux

我可以看到-prune find无法正常工作。我猜-name "efence*" -prune选项应该选择(或查找)除名称efence*正确的文件以外的所有文件?

还是我理解错误?

我执行的命令: find * -maxdepth 0 -name "efence*" -prune

期望值 :选择当前目录(maxdepth 0)中除名称* efence以外的所有文件。

请帮我理解 -prune


阅读 465

收藏
2020-06-07

共1个答案

一尘不染

尝试

find * -maxdepth 0 -name "efence*" -prune -o -print

如果未指定其他选项,则该prune选项 打印匹配的文件(但是,它仍然阻止find递归到匹配的目录中)。

编辑添加说明:

find表达式区分testsactions。来自man find

该表达式由选项(影响整体操作而不是特定文件的处理,并且始终返回true),测试(返回true或false值)和操作(具有副作用并返回true或true)组成。假值),全部由运算符分隔。
-and假设省略了运算符。

如果表达式包含比其他任何动作-prune-print是在该表达式为true的所有文件执行。[我的重点]

-prune具有副作用的操作也是这样,该操作find不会递归到与先前测试匹配的子目录中(在您的情况下为-maxdepth 0 -name "efence*")。但是,就表达式的真值而言,它等同于

find * -maxdepth 0 -name "efence*" -true

并且由于您未指定任何其他操作,-print因此假设该假设(该假设始终存在,因为它允许您键入例如find . -name "*.java"而不是find . -name "*.java" -print)。

希望有道理。在其他线程上接受的答案谈论的是同一件事。

2020-06-07