-print
это действие по умолчанию . Некоторые find
предикаты рассматриваются как действия, а не как фильтры или условия . Например, -type f
это не действие. -exec
это действие, хотя оно также может быть использовано в качестве условия.
Действия включают в себя -print
, -exec
и -ok
. Некоторые find
реализации имеют другие нестандартные предикаты действия , такие как -print0
, -printf
, -execdir
, -okdir
, -ls
...
find files <some-predicates>
Где ни одно из <some-predicates>
содержащихся действий не эквивалентно:
find files \( <some-predicates> \) -print
(обратите внимание на круглые скобки, которые важны, если есть несколько -o
операторов).
В случае сомнений лучше всего использовать -print
явно (или -exec printf '%s\0' {} +
(или -print0
там, где это возможно), чтобы выходные данные могли быть постобработаны).
Действие по умолчанию -print
определяется POSIX. Некоторые старые find
реализации требовали явного-print
, но в настоящее время они обычно не встречаются в дикой природе.
Также обратите внимание, что некоторые find
реализации позволяют опускать files
, в этом случае они по умолчанию для поиска в текущем каталоге. То есть для них
find
эквивалентно
find .
find . -print
Это, однако, не является стандартным, поэтому лучше избегать.
На более подробном (и полезном) конце спектра некоторые find
реализации также позволяют передавать пути к файлам в качестве аргумента для -f
опции, как в:
find -f "$file1" -f "$file2" -print
Они являются единственными find
реализациями, которые позволяют передавать произвольные пути к файлам find
. Другие реализации не могут принимать пути к файлам, такие как !
или -print
... поэтому find "$file" -print
(или даже find -- "$file" -print
) предполагает, что $file
это не имя find
предиката (или опция в первом случае).
К сожалению, это не стандартно и не портативно.