Как это работает? Вы определили, что команда find
должна искать в текущем каталоге (.
) файлы, измененные позже, чем файл while2 (-newer while2
), и, если этот критерий пройден, проверять с помощью следующего критерия (-type f
), обычные ли это файлы. В заключение вы применили действие, с которым уже сталкивались, -print
, просто для того чтобы подтвердить, что файлы были найдены.
Теперь найдем файлы с именами, начинающимися с символа подчеркивания или измененные позже, чем файл while2, но в любом случае обычные файлы. Этот пример покажет, как объединять критерии с помощью скобок.
$ find . \( -name "_*" -or -newer while2 \) -type f -print
./elif3
./words.txt
./words2.txt
./_break
./_if
./set
./_shift
./_trap
./_unset
./ until
$
Это не слишком трудный пример, не так ли? Вы должны экранировать скобки, чтобы они не обрабатывались командной оболочкой, и заключить в кавычки символ *
, чтобы он также был передан непосредственно в команду find
.
Теперь, когда вы можете правильно искать файлы, рассмотрим действия, которые можно совершить, когда найден файл, соответствующий вашей спецификации. И снова в табл. 2.13 перечислены только самые популярные действия; полный список можно найти на страницах интерактивного справочного руководства.
Действие | Описание |
---|---|
-exec | Выполняеткоманду \; |
-ok | Подобно действию exec , за исключением того, что перед обработкой файловкомандой \; |
-print | Вывод на экран имени файла |
-ls | Применение команды ls -dils к текущему файлу |
Команда в аргументах -exec
и -ok
принимает последующие параметры в строке как собственные, пока не встретится последовательность \;
В действительности команда, в аргументах -exec
и -ok
выполняет встроенную команду, поэтому встроенная команда должна завершиться экранированной точкой с запятой, для того чтобы команда find
могла определить, когда ей следует продолжить поиск в командной строке аргументов, предназначенных для нее самой. Магическая строка {}
— параметр специального типа для команд -exec
и -ok
, который заменяется полным путем к текущему файлу.
Объяснение, возможно, не слишком легкое для понимания, поэтому рассмотрим пример, который поможет внести ясность. Взгляните на простой пример, использующий хорошую безопасную команду ls
:
$ find . -newer while2 -type f -exec ls -l {} \;
-rwxr-xr-x 1 rick rick 275 Feb 8 17:07 ./elif3
-rwxr-xr-x 1 rick rick 336 Feb 8 16:52 ./words.txt
-rwxr-xr-x 1 rick rick 1274 Feb 8 16:52 ./words2.txt
-rwxr-xr-x 1 rick rick 504 Feb 8 18:43 ./_trap
$
Как видите, команда find
чрезвычайно полезна; она только требует небольшой практики для умелого ее применения. И такая практика, как и эксперименты с командой find
, обязательно принесет дивиденды.
Вторая очень полезная команда, заслуживающая рассмотрения, — это команда grep
. Необычное имя, означающееfind
для поиска файлов в вашей системе, а команду grep
для поиска строк в ваших файлах. Действительно, очень часто при использовании команды find
команда grep
передается после аргумента -exec
.
Команда grep
принимает опции, шаблон соответствия и файлы для поиска:
grep [
Если имена файлов не заданы, команда анализирует стандартный ввод.
Давайте начнем с изучения основных опций команды grep
. И на этот раз в табл. 2.14 приведены только самые важные из них; полный список см. на страницах интерактивного справочного руководства.