Из findutils
find
справочной страницы :
Если выражение не задано, выражение -print
используется (но вам -print0
все равно, вероятно, следует рассмотреть возможность его использования ).
( -print
это find
выражение.)
Документация POSIX подтверждает это:
Если выражение отсутствует, в качестве выражения следует использовать -print .
Так find .
что в точности эквивалентно find . -print
; первое не имеет выражения, поэтому -print
добавляется внутри.
Объяснение того, что -print
происходит, приведено ниже на странице руководства:
-print
Правда; Напечатайте полное имя файла на стандартном выводе, за которым следует новая строка. Если вы передаете вывод команды find в другую программу и существует минимальная вероятность того, что файлы, которые вы ищете, могут содержать символ новой строки, тогда вам следует серьезно рассмотреть возможность использования -print0
параметра вместо -print
. Смотрите раздел НЕОБЫЧНЫЕ ФИЛЬМЫ для получения информации о том, как обрабатываются необычные символы в именах файлов.
-print
это действие по умолчанию . Некоторыеfind
предикаты рассматриваются как действия, а не как фильтры или условия . Например,-type f
это не действие.-exec
это действие, хотя оно также может быть использовано в качестве условия.Действия включают в себя
-print
,-exec
и-ok
. Некоторыеfind
реализации имеют другие нестандартные предикаты действия , такие как-print0
,-printf
,-execdir
,-okdir
,-ls
...Где ни одно из
<some-predicates>
содержащихся действий не эквивалентно:(обратите внимание на круглые скобки, которые важны, если есть несколько
-o
операторов).В случае сомнений лучше всего использовать
-print
явно (или-exec printf '%s\0' {} +
(или-print0
там, где это возможно), чтобы выходные данные могли быть постобработаны).Действие по умолчанию
-print
определяется POSIX. Некоторые старыеfind
реализации требовали явного-print
, но в настоящее время они обычно не встречаются в дикой природе.Также обратите внимание, что некоторые
find
реализации позволяют опускатьfiles
, в этом случае они по умолчанию для поиска в текущем каталоге. То есть для нихэквивалентно
Это, однако, не является стандартным, поэтому лучше избегать.
На более подробном (и полезном) конце спектра некоторые
find
реализации также позволяют передавать пути к файлам в качестве аргумента для-f
опции, как в:Они являются единственными
find
реализациями, которые позволяют передавать произвольные пути к файламfind
. Другие реализации не могут принимать пути к файлам, такие как!
или-print
... поэтомуfind "$file" -print
(или дажеfind -- "$file" -print
) предполагает, что$file
это не имяfind
предиката (или опция в первом случае).К сожалению, это не стандартно и не портативно.
источник
Они одинаковы, оба выписывают всю иерархию каталогов из текущего каталога.
Из POSIX найти документацию :
источник
В Linux нет разницы, но другие системы (например, AIX) нужны,
-print
если вы хотите, чтобы вывод команды отображался на вашем экране.источник
find
не нуждается в этом. AIX была POSIX-совместимой на протяжении десятилетий.В течение многих лет команда поиска не имела действия по умолчанию. Распространенной ошибкой было забыть добавить опцию -print в команду find. Я до сих пор набираю это по привычке.
Но в какой-то момент он был добавлен как действие по умолчанию, так что теперь
find .
иfind . -print
эквивалентны.источник
Иногда полезно использовать
-print
явно, когда вы выполняете другое действие, чтобы имя файла отображалось при выполнении этого действия.будет похоже на
где
-print
соответствует-v
. Если вы не включите,-print
то имена файлов не отображаются.rm
Кстати, чтобы сделать команду еще более похожей, сначала выполните эту команду Bashкоторый сделает
*
файлы совпадения точек (скрытые).источник