-print 现在对于 find 来说是一个无用的选项吗?

-print 现在对于 find 来说是一个无用的选项吗?

我刚刚尝试过:

find . -name "*.[hc]" -print

find . -name "*.[hc]"

但是两者的输出相同,-print现在没用了吗?

答案1

查看 FreeBSD 下的手册页,我看到:

 -print  This primary always evaluates to true.  It prints the pathname of
         the current file to standard output.  If none of -exec, -ls,
         -print0, or -ok is specified, the given expression shall be
         effectively replaced by ( given expression ) -print.

因此在很多情况下是不必要的。但是,请考虑以下表达式,它在 内-print查找名为 的文件,但不在名为 的任何目录中查找:foosomedir.snapshot

find somedir -name .snapshot -prune -o -name foo

鉴于上述描述,这将转变为:

find somedir ( -name .snapshot -prune -o -name foo ) -print

这与可能的意图不一样:

find somedir -name .snapshot -prune -o -name foo -print

添加括号使该组更加明显,如下所示:

find somedir ( -name .snapshot -prune ) -o ( -name foo -print )

要发现差异,请注意-prune和的-print计算结果均为true。因此,如果不指定-print,第一个版本将打印出当前文件,如果任何一个 -name .snapshot-name foo火柴。

第二个版本仅当匹配时才会输出当前文件-name foo

这是一种冗长的说法,-print只要您了解需要它的情况,通常就没有必要。

答案2

当您做其他事情但仍想看比赛时它也很有用。

对于我来说这是一个常见的脚本调用:

find . -name '*somepattern*' -print -delete

相关内容