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

kin*_*er1 5 linux find

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

或者我的理解是错的?

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

期望:选择当前目录(maxdepth 0)中的所有文件,但名称为*efence的文件除外.

请帮我理解 -prune

Ope*_*uce 7

尝试

find * -maxdepth 0 -name "efence*" -prune -o -print
Run Code Online (Sandbox Code Playgroud)

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

编辑添加说明:

find表达区分testsactions.来自man find:

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

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

因此-prune,具有副作用的动作find不会递归到与前面的测试匹配的子目录(在您的情况下-maxdepth 0 -name "efence*").但就表达式的真值而言,它只相当于拥有

find * -maxdepth 0 -name "efence*" -true
Run Code Online (Sandbox Code Playgroud)

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

希望有道理.在另一个线程中接受的答案谈到同样的事情.