Я только что попробовал:
find . -name "*.[hc]" -print
а также
find . -name "*.[hc]"
Но оба вывода одинаковы, теперь -print
бесполезен?
Глядя на страницу руководства под 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
обычно не требуется, если вы понимаете ситуации, в которых это необходимо.
Это также полезно, когда вы занимаетесь другими делами, но все же хотите посмотреть матчи.
Это общий вызов сценария для меня:
find . -name '*somepattern*' -print -delete