我刚刚尝试过:
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
查找名为 的文件,但不在名为 的任何目录中查找:foo
somedir
.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