FINDНАЗВАНИЕ find - поиск файлов
СИНТАКСИС find список_поиска выражение
ОПИСАНИЕ Команда find рекурсивно просматривает каждый из каталогов, перечисленных в
списке_поиска, отыскивая файлы, удовлетворяющие логическому выражению,
построенному с помощью описанных ниже средств. В список_поиска могут входить
и обычные файлы. Далее n обозначает целое десятичное число, на месте которого
могут также указываться комбинации +n, что означает "больше, чем n", и -n,
что означает "меньше, чем n". Элементарные логические выражения и их
результаты:
- -name шаблон_файлов
- Истина, если текущий файл удовлетворяет шаблону_файлов. Символы шаблона,
имеющие для shell'а специальный смысл, должны быть экранированы.
- [-perm] [-]восьмеричное_число
- Истина, если режим доступа к текущему файлу в точности равен
восьмеричному_числу [см. chmod]. Если перед
восьмеричным_числом указан знак -, то для сравнения из режима файла берутся
только биты, соответствующие битам восьмеричного_числа, равным единице.
- -type c
- Истина, если файл имеет тип c, где c есть b, c, d, p или f - блочный или
символьный специальный файл, каталог, именованный канал или обычный файл.
- -links n
- Истина, если на файл имеется n ссылок.
- -user имя_пользователя
- Истина, если файл принадлежит пользователю с данным именем. Если
имя_пользователя является числом и не встречается в файле /etc/passwd, оно
рассматривается как идентификатор пользователя.
- -group имя_группы
- Истина, если файл принадлежит группе с данным именем. Если имя_группы
является числом и не встречается в файле /etc/group, оно рассматривается как
идентификатор группы.
- -size n[c]
- Истина, если файл занимает n блоков (по 512 байт). Если указана буква c,
то размер файла задается в символах. Напомним, что с помощью комбинаций +n
и -n можно проверять размер (и три указанные ниже характеристики) не только
на равенство, но и на неравенство.
- -atime n
- Истина, если последний доступ к файлу производился n дней назад. Сама
команда find изменяет время доступа к каталогам, входящим в список_поиска.
- -mtime n
- Истина, если файл последний раз модифицировался n дней назад.
- -ctime n
- Истина, если характеристики файла (размер, режим доступа) последний раз
изменялись n дней назад.
- -exec команда
- Истина, если после выполнения команды возвращается нулевой код
завершения. Запись команды должна заканчиваться экранированной точкой с
запятой. Аргумент команды { } заменяется текущим маршрутным именем файла.
- -ok команда
- Эквивалентно -exec за исключением того, что перед выполнением команды
запрашивается подтверждение (в виде сгенерированной командной строки со
знаком вопроса в конце) и она выполняется только при ответе y.
- -print
- Всегда истина; вызывает выдачу маршрутного имени текущего файла.
- -cpio устройство
- Всегда истина; вызывает вывод текущего файла на указанное устройство в
формате cpio (записями по 5120 байт).
- -newer файл
- Истина, если текущий файл был модифицирован позднее указанного файла.
- -depth
- Всегда истина; изменяет способ просмотра каталогов: сначала
просматриваются входящие в каталог файлы, а затем уже сам каталог. Этот
предикат полезен в сочетании с cpio для переноса файлов из каталогов, на
запись в которые нет прав.
- -mount
- Всегда истина; ограничивает поиск файловой системой, содержащей указанный
в списке_поиска каталог. Если в списке_поиска не указан ни один каталог,
используется текущий.
- -local
- Истина, если файл физически находится на локальной системе.
- (выражение)
- Истина, если истинно заключенное в скобки выражение (скобки должны быть
экранированы от интерпретации shell'ом).
Элементарные логические выражения могут комбинироваться
с помощью следующих операций (в порядке уменьшения приоритета):
- Унарная операция отрицания, обозначается !.
- Логическое И, обозначается пробелом.
- Логическое ИЛИ, обозначается -o.
ПРИМЕР
- Удалить все файлы с именами a.out или *.o, доступ к которым не
производился в течение недели:
find / \( -name a.out -o -name '*.o' \) \ -atime +7 -exec rm {} \;
- Удалить из текущего каталога и его подкаталогов все файлы нулевого
размера, запрашивая подтверждение:
find . -size 0c -ok rm {} \;
ФАЙЛЫ /etc/passwd /etc/group
СМ. ТАКЖЕ chmod, man sh, man umask.
СЮРПРИЗЫ Команда
find / -depth
всегда завершается неудачей с сообщением
find: stat failed: : No such file or directory
Она исправно обходит все файлы, кроме корневого каталога.
|