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