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

时间:2011-08-01 09:36:53

标签: linux find

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

或者我的理解错了吗?

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

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

请帮助我理解-prune

1 个答案:

答案 0 :(得分:7)

尝试

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

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

编辑添加说明:

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

  

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

     

如果表达式不包含-prune以外的任何操作,则对表达式为true的所有文件执行-print [我的重点]

因此,-prune是一个副作用,find不会递归到与前一个测试匹配的子目录(在您的情况下为-maxdepth 0 -name "efence*")。但就表达式的真值而言,它等同于

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

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

希望这是有道理的。在the other thread接受的答案谈到同样的事情。