Чтение онлайн

на главную - закладки

Жанры

Основы программирования в Linux
Шрифт:

Таблица 2.11

Критерий Описание
– atime N
К файлу обращались последний раз
N
дней назад
– mtime N
Файл последний раз изменялся
N
дней назад
– name шаблон
Имя файла без указания пути соответствует заданному шаблону. Для гарантии того, что шаблон будет передан в команду
find
и не будет немедленно обработан командной оболочкой, его следует всегда заключать в кавычки
– newer другой файл
Текущий файл, измененный позже, чем другой файл
– type С
Файл типа
C
, где
C
может принимать определенные значения; наиболее широко используемые "
d
" для каталогов и "
f
" для обычных файлов. Остальные обозначения типов можно посмотреть на страницах интерактивного справочного руководства
– user имя пользователя
Файл принадлежит пользователю с заданным именем

Вы также можете объединять критерии с помощью операторов. Как показано в табл. 2.12, у большинства из них две формы записи: короткая и более длинная форма.

Таблица 2.12

Оператор, короткая форма Оператор, длинная форма Описание
!
– not
Инвертирование критерия
– а
– and
Оба критерия должны быть истинны
– о
– or
Один из критериев должен быть истинным

Изменить порядок проверки критериев и выполнения операторов можно с помощью скобок. Поскольку в командной оболочке у них есть особое назначение, скобки также следует выделять с помощью обратного слэша. Кроме того, если вы применяете шаблон для имени файла, то следует использовать кавычки, чтобы оболочка не выполняла подстановку имени, а прямо передала шаблон команде

find
. Например, если вы хотите задать критерий "измененный позже, чем файл
X
, или с именем, начинающимся со знака подчеркивания", его можно записать следующим образом:

\(-newer X -о -name "_*" \)

Мы приведем пример сразу после описания "Как это работает". А сейчас выполните упражнение 2.16.

Упражнение 2.16 Применение команды
find
с критериями

Попытаемся найти в текущем каталоге файлы, измененные после модификации файла while2.

$ find .
– newer while2 -print

.

./elif3

./words.txt

./words2.txt

./_trap

$

Все чудесно, за исключением того, что вы нашли ненужный вам текущий каталог. Вас интересуют только обычные файлы, поэтому добавьте дополнительный критерий

– type f
.

$ find .
– newer while2 -type f -print

./elif3

./words.txt

./words2.txt

./_trap

$

Как это работает

Как это работает? Вы определили, что команда

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 перечислены только самые популярные действия; полный список можно найти на страницах интерактивного справочного руководства.

Таблица 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

Поделиться:
Популярные книги

Царь царей

Билик Дмитрий Александрович
9. Бедовый
Фантастика:
фэнтези
мистика
5.00
рейтинг книги
Царь царей

Законы Рода. Том 14

Андрей Мельник
14. Граф Берестьев
Фантастика:
аниме
фэнтези
эпическая фантастика
5.00
рейтинг книги
Законы Рода. Том 14

Имя нам Легион. Том 9

Дорничев Дмитрий
9. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 9

Точка Бифуркации VI

Смит Дейлор
6. ТБ
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Точка Бифуркации VI

Барон не играет по правилам

Ренгач Евгений
1. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон не играет по правилам

Студиозус

Шмаков Алексей Семенович
3. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Студиозус

Лекарь Империи 9

Карелин Сергей Витальевич
9. Лекарь Империи
Фантастика:
городское фэнтези
аниме
боевая фантастика
5.00
рейтинг книги
Лекарь Империи 9

Цикл "Идеальный мир для Лекаря". Компиляция. Книги 1-30

Сапфир Олег
Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Цикл Идеальный мир для Лекаря. Компиляция. Книги 1-30

Рассвет русского царства

Грехов Тимофей
1. Новая Русь
Документальная литература:
историческая литература
5.00
рейтинг книги
Рассвет русского царства

Первый среди равных. Книга VIII

Бор Жорж
8. Первый среди Равных
Фантастика:
аниме
фантастика: прочее
эпическая фантастика
попаданцы
5.00
рейтинг книги
Первый среди равных. Книга VIII

Отморозок 5

Поповский Андрей Владимирович
5. Отморозок
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Отморозок 5

Император Пограничья 4

Астахов Евгений Евгеньевич
4. Император Пограничья
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Император Пограничья 4

На границе империй. Том 10. Часть 9

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 9

Отморозок 4

Поповский Андрей Владимирович
4. Отморозок
Фантастика:
попаданцы
фантастика: прочее
5.00
рейтинг книги
Отморозок 4