Каково различие между находкой. и найдите.печать

Как насчет:

grep --color=auto -r -n sometext *

Пример произвел:

filename:10:    foo sometext bar

Первое поле является именем файла, второе поле является номером строки и sometext окрашен.

28
22.04.2015, 12:45
6 ответов

Из findutils найдите справочную страницу :

Если выражение не указано, выражение Используется -print (но вам, вероятно, все равно следует рассмотреть возможность использования вместо него -print0 ).

( -print является выражением find .)

Документация POSIX подтверждает это:

Если нет выражения присутствует, -print должен использоваться в качестве выражения.

Итак найти. в точности эквивалентен find.-принт ; первый не имеет выражения, поэтому -print добавляется внутри.

Объяснение того, что делает -print , приводится ниже на странице руководства:

-print

True; напечатайте полное имя файла в стандартном выводе с последующим переводом строки.Если вы передаете вывод find в другую программу и существует малейшая вероятность того, что файлы, которые вы ищете, могут содержать новую строку, вам следует серьезно подумать об использовании параметра -print0 вместо ] -принт . См. Раздел НЕОБЫЧНЫЕ ФАЙЛЫ для получения информации о том, как обрабатываются необычные символы в именах файлов.

41
27.01.2020, 19:38

В течение многих лет команда FACE не имела по умолчанию. Общая ошибка забыла добавить опцию -Print на вашу команду find. Я до сих пор на этот день введите это из привычки.

Но в какой-то момент он был добавлен в качестве действия по умолчанию, так что теперь Найти. и Найти. -Принт эквивалентен.

3
27.01.2020, 19:38

В Linux нет никакой разницы, но другим системам (например, AIX) требуется -принт, если вы хотите, чтобы вывод команды отображался на вашем экране.

4
27.01.2020, 19:38

Иногда бывает полезно явно использовать -печать при выполнении другого действия, чтобы при выполнении этого действия отображалось имя файла.

find . -print -delete

будет аналогично

rm -rfv *

, где -print соответствует -v. Если не включить -print, то имена файлов не будут отображаться.

Для того, чтобы команда rm стала еще более похожей, кстати, сначала выпустите команду Bash

shopt -s dotglob

, которая сделает файлы * совпадающими с точечными (скрытыми) файлами.

1
27.01.2020, 19:38

Они одинаковы, они оба записывают всю иерархию каталогов из текущего каталога.

Из POSIX найти документацию:

Следующие команды эквивалентны:

найти .

найти . -print

8
27.01.2020, 19:38

-print - это действие по умолчанию . Некоторые предикаты find рассматриваются как действия в отличие от фильтров или условий . Например, -тип f не является действием. -exec - это действие, хотя его также можно использовать как условие.

Действия включают -print , -exec и -ok . Некоторые реализации find имеют другие нестандартные предикаты действий, такие как -print0 , -printf , -execdir , -okdir , -ls ...

find files <some-predicates>

Если ни одно из не содержит действий , эквивалентно:

find files \( <some-predicates> \) -print

(обратите внимание на круглые скобки выше, которые важны, если есть операторы -o ).

В случае сомнений лучше всего использовать явно -print (или -exec printf '% s \ 0' {} + (или -print0 ) где возможно), чтобы выходные данные можно было подвергнуть последующей обработке).

Действие по умолчанию -print определяется POSIX. Некоторые старые реализации find требовали явного -принта , но они обычно не встречаются в настоящее время.

Также обратите внимание, что некоторые реализации find позволяют опускать файлы , и в этом случае они по умолчанию ищут в текущем каталоге. То есть для них

find

эквивалентно

find .
find . -print

, однако это не стандартно, поэтому его лучше избегать.

На более подробном (и полезном) конце спектра некоторые реализации find также позволяют передавать пути к файлам в качестве аргумента для параметра -f , как в:

find -f "$file1" -f "$file2" -print

Они являются единственными реализациями find , которые позволяют передавать произвольные пути к файлам в find . Другие реализации не могут принимать такие пути к файлам, как ! или -print ... поэтому find "$ file" -print (или даже find - "$ file" -print ) предполагает $ file не является именем предиката find (или опции в первом случае).

К сожалению, это тоже не стандартно и не переносимо.

21
27.01.2020, 19:38

Теги

Похожие вопросы