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
的组合是一种常见的“条件打印模式”(我的术语)。