Linux find中的-prune选项做什么?

Linux find中的-prune选项做什么?,linux,find,Linux,Find,我可以看到find的-prune没有正常工作。我想-name“efence*”-prune选项应该选择(或查找)除名为efence*的文件之外的所有文件,对吗 还是我的理解错了 我执行的命令: find*-maxdepth 0-name“efence*”-prune 期望值:选择当前目录中的所有文件(maxdepth 0),除了名为*efence的文件 请帮我理解-prune试试看 find * -maxdepth 0 -name "efence*" -prune -o -print 如果没有

我可以看到
find
的-prune没有正常工作。我想
-name“efence*”-prune
选项应该选择(或查找)除名为
efence*
的文件之外的所有文件,对吗

还是我的理解错了

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

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

请帮我理解
-prune

试试看

find * -maxdepth 0 -name "efence*" -prune -o -print
如果没有指定其他选项,
prune
选项会打印匹配的文件(但是,它仍然会阻止
find
递归到匹配的目录中)

编辑以添加解释:

find
表达式区分
测试
操作
。从
人工查找

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

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

因此,
-prune
是一个具有副作用的操作,
find
不会递归到与前面测试匹配的子目录中(在您的示例中,
-maxdepth 0-name“efence*”
)。但就表达式的真值而言,它相当于

find * -maxdepth 0 -name "efence*" -true
而且,由于您没有指定任何其他操作,因此假定使用了
-print
(此假定始终存在,因为它允许您键入例如
find.-name“*.java”
,而不是
find.-name“*.java”-print


希望这是有道理的。会议上被接受的答案也谈到了同样的问题。

我打赌你会得到一个更好的答案。我如何迁移?或者让管理员迁移?是的,它将由管理员迁移。可能的副本适用于被否决的人。让我告诉你,find也可以用于shell脚本,shell脚本是程序。我接受你的答案,但请解释
-o print
是如何发挥神奇作用的。为了完整起见,作为对kingmasher1在评论中提出的问题的回应。OpenSauce解释说,
find*-maxdepth 0-name“efence*”
find*-maxdepth 0-name“efence*”-prune
find*-maxdepth 0-name“efence*”-prune-print
产生的结果与
find*-maxdepth 0-name“efence*-true”相同,其中
-print`是隐含的,而test
-true
。。。始终计算为“真”。也就是说,通过该指令,您可以找到名称与模式
“efence*”
匹配的所有文件。这里没有其他操作可以进行修剪,因此
find-prune
实际上会打印它通常要修剪的内容。[从上面继续]修剪的替代方法是
find*-maxdepth 0-name“efence*”-prune-o-print
中的
-o-print
操作。在这种情况下,当测试
(…)
评估为“真”时,
find*(…)-prune部分实际上会将结果修剪为“真”,如果没有,则打印结果。当您使用
find
时,您会发现
find*(…)-prune-o-print
的组合是一种常见的“条件打印模式”(我的术语)。