Теперь найдем файлы с именами, начинающимися с символа подчеркивания или измененные позже, чем файл while2, но в любом случае обычные файлы. Этот пример покажет, как объединять критерии с помощью скобок.
$ find . \( -name "_*" -or -newer while2 \) -type f -print
./elif3
./words.txt
./words2.txt
./_break
./_if
./set
./_shift
./_trap
./_unset
./ until
$
Это не слишком трудный пример, не так ли? Вы должны экранировать скобки, чтобы они не обрабатывались командной оболочкой, и заключить в кавычки символ *
, чтобы он также был передан непосредственно в команду find
.
Теперь, когда вы можете правильно искать файлы, рассмотрим действия, которые можно совершить, когда найден файл, соответствующий вашей спецификации. И снова в табл. 2.13 перечислены только самые популярные действия; полный список можно найти на страницах интерактивного справочного руководства.
Таблица 2.13
Действие |
Описание |
-exec команда |
Выполняет команду . Наиболее широко используемое действие. После табл. 2.13 приведено объяснение способа передачи параметров в команду. Это действие следует завершать символьной парой \; |
-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
Вторая очень полезная команда, заслуживающая рассмотрения, — это команда grep
. Необычное имя, означающее общий синтаксический анализатор регулярных выражений (general regular expression parser). Вы применяете команду find
для поиска файлов в вашей системе, а команду grep
для поиска строк в ваших файлах. Действительно, очень часто при использовании команды find
команда grep
передается после аргумента -exec
.
Команда grep
принимает опции, шаблон соответствия и файлы для поиска:
grep[ опции ] шаблон [ файлы ]
Если имена файлов не заданы, команда анализирует стандартный ввод.
Давайте начнем с изучения основных опций команды grep
. И на этот раз в табл. 2.14 приведены только самые важные из них; полный список см. на страницах интерактивного справочного руководства.
Таблица 2.14
Опция |
Описание |
-с |
Вместо вывода на экран совпавших с шаблоном строк выводит их количество |
-E |
Включает расширенные регулярные выражения |
-h |
Ужимает обычное начало каждой строки вывода за счет удаления имени файла, в котором строка найдена |
-i |
Не учитывает регистр букв |
-l |
Перечисляет имена файлов со строками, совпадающими с шаблоном; не выводит сами найденные строки |
-v |
Меняет шаблон соответствия для выбора вместо строк, соответствующих шаблону, несовпадающих с ним строк |
Выполните упражнение 2.17.
Читать дальше