You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何find命令中使用'-o -print'会无输出?

为何find命令中使用'-o -print'会无输出?

嘿,这个问题其实是find命令的运算符优先级在搞鬼,我来给你掰扯清楚~

首先得搞懂find的两个关键规则:

  • 当你没显式指定动作(比如-print)时,find默认会对所有匹配到的文件执行-print
  • find里的逻辑与(-a,可以省略不写)优先级比逻辑或(-o)高,和咱们平时写代码的逻辑优先级是一样的

先看你写的version 1命令:

find . -iname "*tif" -o -iname "*foo"

因为没有显式动作,find会自动给整个匹配表达式加上默认的-print,实际等价于:

find . \( -iname "*tif" -o -iname "*foo" \) -print

这里括号把两个-iname的条件组合成一个整体,只要满足其中一个,就会执行-print,所以你能看到所有tif文件的输出。

再看version 2的命令:

find . -iname "*tif" -o -iname "*foo" -print

因为逻辑与的优先级更高,这个命令会被find解析成:

find . -iname "*tif" -o \( -iname "*foo" -a -print \)

翻译成人话就是:要么匹配到tif文件但不做任何输出动作,要么匹配到foo文件才执行-print。而你的目录里没有*.foo文件,自然就啥输出都没有啦!

如果想让version 2和version 1输出一致,你需要用括号把OR的条件括起来(注意括号要加反斜杠转义,避免被shell解析),强制让find先计算OR的逻辑,再统一执行-print:

find . \( -iname "*tif" -o -iname "*foo" \) -print

这样运行后,就能得到和version 1一样的结果了~

备注:内容来源于stack exchange,提问作者whiskeychief

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 09:47:34