Читать книгу 📗 "Основы программирования в Linux - Мэтью Нейл"
Изменить порядок проверки критериев и выполнения операторов можно с помощью скобок. Поскольку в командной оболочке у них есть особое назначение, скобки также следует выделять с помощью обратного слэша. Кроме того, если вы применяете шаблон для имени файла, то следует использовать кавычки, чтобы оболочка не выполняла подстановку имени, а прямо передала шаблон команде
findX(-newer X -о -name "_*" )Мы приведем пример сразу после описания "Как это работает". А сейчас выполните упражнение 2.16.
findПопытаемся найти в текущем каталоге файлы, измененные после модификации файла while2.
$ <b>find . -newer while2 -print</b>../elif3./words.txt./words2.txt./_trap$Все чудесно, за исключением того, что вы нашли ненужный вам текущий каталог. Вас интересуют только обычные файлы, поэтому добавьте дополнительный критерий
-type f$ <b>find . -newer while2 -type f -print</b>./elif3./words.txt./words2.txt./_trap$Как это работает
Как это работает? Вы определили, что команда
find.-newer while2-type f-printТеперь найдем файлы с именами, начинающимися с символа подчеркивания или измененные позже, чем файл while2, но в любом случае обычные файлы. Этот пример покажет, как объединять критерии с помощью скобок.
$ <b>find . ( -name "_*" -or -newer while2 ) -type f -print</b>./elif3./words.txt./words2.txt./_break./_if./set./_shift./_trap./_unset./ until$Это не слишком трудный пример, не так ли? Вы должны экранировать скобки, чтобы они не обрабатывались командной оболочкой, и заключить в кавычки символ
*findТеперь, когда вы можете правильно искать файлы, рассмотрим действия, которые можно совершить, когда найден файл, соответствующий вашей спецификации. И снова в табл. 2.13 перечислены только самые популярные действия; полный список можно найти на страницах интерактивного справочного руководства.
Таблица 2.13
| Действие | Описание |
|---|---|
-exec <i>команда</i> | Выполняеткоманду; |
-ok <i>команда</i> | Подобно действию execкомандой; |
-print | Вывод на экран имени файла |
-ls | Применение команды ls -dils |
Команда в аргументах
-exec-ok;-exec-okfind{}-exec-okОбъяснение, возможно, не слишком легкое для понимания, поэтому рассмотрим пример, который поможет внести ясность. Взгляните на простой пример, использующий хорошую безопасную команду
ls$ <b>find . -newer while2 -type f -exec ls -l {} ;</b>-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$Как видите, команда
findfindВторая очень полезная команда, заслуживающая рассмотрения, — это команда
grepfindgrepfindgrep-exec