Как насчет:
grep --color=auto -r -n sometext *
Пример произвел:
filename:10: foo sometext bar
Первое поле является именем файла, второе поле является номером строки и sometext
окрашен.
Из findutils
найдите
справочную страницу :
Если выражение не указано, выражение
Используется -print
(но вам, вероятно, все равно следует рассмотреть возможность использования вместо него-print0
).
( -print
является выражением find
.)
Документация POSIX подтверждает это:
Если нет выражения присутствует, -print должен использоваться в качестве выражения.
Итак найти.
в точности эквивалентен find.-принт
; первый не имеет выражения, поэтому -print
добавляется внутри.
Объяснение того, что делает -print
, приводится ниже на странице руководства:
True; напечатайте полное имя файла в стандартном выводе с последующим переводом строки.Если вы передаете вывод find в другую программу и существует малейшая вероятность того, что файлы, которые вы ищете, могут содержать новую строку, вам следует серьезно подумать об использовании параметра
-print0
вместо] -принт
. См. Раздел НЕОБЫЧНЫЕ ФАЙЛЫ для получения информации о том, как обрабатываются необычные символы в именах файлов.
В течение многих лет команда FACE не имела по умолчанию. Общая ошибка забыла добавить опцию -Print на вашу команду find. Я до сих пор на этот день введите это из привычки.
Но в какой-то момент он был добавлен в качестве действия по умолчанию, так что теперь Найти.
и Найти. -Принт
эквивалентен.
В Linux нет никакой разницы, но другим системам (например, AIX) требуется -принт
, если вы хотите, чтобы вывод команды отображался на вашем экране.
Иногда бывает полезно явно использовать -печать
при выполнении другого действия, чтобы при выполнении этого действия отображалось имя файла.
find . -print -delete
будет аналогично
rm -rfv *
, где -print
соответствует -v
. Если не включить -print
, то имена файлов не будут отображаться.
Для того, чтобы команда rm
стала еще более похожей, кстати, сначала выпустите команду Bash
shopt -s dotglob
, которая сделает файлы *
совпадающими с точечными (скрытыми) файлами.
Они одинаковы, они оба записывают всю иерархию каталогов из текущего каталога.
Следующие команды эквивалентны:
найти .
найти . -print
-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
(или опции в первом случае).
К сожалению, это тоже не стандартно и не переносимо.