<Предыдущая | Содержание: | Следующая>
Предопределенные действия
Давайте поработаем! Имея список результатов наших найдите Команда полезна, но на самом деле мы хотим действовать в соответствии с элементами в списке. К счастью, найдите позволяет выполнять действия на основе результатов поиска. Существует набор предопределенных действий и несколько способов применения действий, определенных пользователем. Сначала давайте посмотрим на несколько предопределенных действий:
Таблица 17-6: Предопределенные действия поиска
Описание действия
Описание действия
-delete Удалить текущий соответствующий файл.
-ls Выполните эквивалент лс -дилс в соответствующем файле.
Вывод отправляется на стандартный вывод.
-print Вывести на стандартный вывод полный путь к соответствующему файлу. Это действие по умолчанию, если не указано другое действие.
-quit Выйти после совпадения.
Как и в случае с тестами, действий гораздо больше. Увидеть найдите справочную страницу для получения полной информации. В нашем самом первом примере мы сделали это:
найти ~
найти ~
который создал список всех файлов и подкаталогов, содержащихся в нашем домашнем каталоге. Был составлен список, потому что -Распечатать действие подразумевается, если не указано другое действие. Таким образом, нашу команду можно также выразить как:
найти ~ -print
найти ~ -print
Мы можем использовать найдите для удаления файлов, соответствующих определенным критериям. Например, чтобы удалить файлы,
имеют расширение файла «.BAK» (которое часто используется для обозначения файлов резервных копий), мы могли бы использовать эту команду:
найти ~ -type f -name '* .BAK' -delete
найти ~ -type f -name '* .BAK' -delete
В этом примере каждый файл в домашнем каталоге пользователя (и его подкаталогах) ищется на предмет имен файлов, оканчивающихся на .БАК. Когда они найдены, они удаляются.
Внимание! Само собой разумеется, что вы должны будьте предельно осторожны при использовании -удалять действие. Всегда сначала проверяйте команду, подставляя
-print действие для -delete для подтверждения результатов поиска.
Прежде чем мы продолжим, давайте еще раз посмотрим, как логические операторы влияют на действия. Рассмотрим следующую команду:
найти ~ -тип f -имя '* .BAK' -print
найти ~ -тип f -имя '* .BAK' -print
Как мы видели, эта команда будет искать каждый обычный файл (-тип f), имя которого заканчивается на .BAK (-name '*.BAK ') и выведет относительный путь каждого совпадающего файла в стандартный вывод (-print). Однако причина того, что команда выполняет именно так, определяется логическими отношениями между каждым из тестов и действий. Помните, что по умолчанию между каждым тестом и действием существует подразумеваемая связь. Мы также могли бы выразить команду таким образом, чтобы было легче увидеть логические связи:
найти ~ -тип f -and -name '* .BAK' -and -print
найти ~ -тип f -and -name '* .BAK' -and -print
Полностью выразив нашу команду, давайте посмотрим, как логические операторы влияют на ее выполнение:
Тест / действие выполняется, только если ...
Тест / действие выполняется, только если ...
-Распечатать -type f и -name '* .BAK' верны
-name '* .BAK' Типа f верно
Типа f Выполняется всегда, так как это первая проверка / действие в
-и отношения.
Поскольку логическая взаимосвязь между тестами и действиями определяет, какие из них выполняются, мы можем видеть, что порядок тестов и действий важен. Например, если бы мы изменили порядок тестов и действий так, чтобы -Распечатать action был первым, команда будет вести себя иначе:
найти ~ -print -and -type f -and -name '* .BAK'
найти ~ -print -and -type f -and -name '* .BAK'
Эта версия команды распечатает каждый файл ( -Распечатать действие всегда оценивается как истина), а затем проверьте тип файла и указанное расширение файла.