我可以看到find
的-prune无法正常工作。我想-name "efence*" -prune
选项应该选择(或查找)除名称为efence*
的文件以外的所有文件吗?
或者我的理解错了吗?
我执行的命令:
find * -maxdepth 0 -name "efence*" -prune
期望:选择当前目录(maxdepth 0
)中的所有文件,但名称为* efence的文件除外。
请帮助我理解-prune
答案 0 :(得分:7)
尝试
find * -maxdepth 0 -name "efence*" -prune -o -print
prune
选项 打印匹配文件,如果没有指定其他选项(但它仍然阻止find
递归到匹配的目录中)。
编辑添加说明:
find
表达式区分tests
和actions
。来自man find
:
表达式由选项组成(影响整体操作 而不是处理特定文件,并始终返回true), 测试(返回真值或假值)和动作(具有 副作用并返回真或假值),全部由运算符分隔。假设省略运算符的地方
-and
。如果表达式不包含
-prune
以外的任何操作,则对表达式为true的所有文件执行
因此,-prune
是一个副作用,find
不会递归到与前一个测试匹配的子目录(在您的情况下为-maxdepth 0 -name "efence*"
)。但就表达式的真值而言,它等同于
find * -maxdepth 0 -name "efence*" -true
由于您未指定任何其他操作,因此假设-print
(此假设始终存在,因为它允许您键入例如find . -name "*.java"
而不是find . -name "*.java" -print
)。
希望这是有道理的。在the other thread接受的答案谈到同样的事情。