find список_поиска выражение
Команда find рекурсивно просматривает каждый из каталогов, перечисленных в списке_поиска, отыскивая файлы, удовлетворяющие логическому выражению, построенному с помощью описанных ниже средств. В список_поиска могут входить и обычные файлы. Далее n
обозначает целое десятичное число, на месте которого могут также указываться комбинации +n
, что означает «больше, чем n», и -n
, что означает «меньше, чем n». Элементарные логические выражения и их результаты:
-name шаблон_файлов Истина, если текущий файл удовлетворяет шаблону_файлов. Символы шаблона, имеющие для shell'а специальный смысл, должны быть экранированы.
[-perm] [-]восьмеричное_число Истина, если режим доступа к текущему файлу в точности равен
восьмеричному_числу [см.
chmod.1]. Если перед
восьмеричным_числом указан знак
-
, то для сравнения из режима файла берутся только биты, соответствующие битам
восьмеричного_числа, равным единице.
-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(1) (записями по 5120 байт).
-newer файл Истина, если текущий файл был модифицирован позднее указанного файла.
-depth Всегда истина; изменяет способ просмотра каталогов: сначала просматриваются входящие в каталог файлы, а затем уже сам каталог. Этот предикат полезен в сочетании с
CPIO(1) для переноса файлов из каталогов, на запись в которые нет прав.
-mount Всегда истина; ограничивает поиск файловой системой, содержащей указанный в списке_поиска каталог. Если в списке_поиска не указан ни один каталог, используется текущий.
-local Истина, если файл физически находится на локальной системе.
(выражение) Истина, если истинно заключенное в скобки выражение (скобки должны быть экранированы от интерпретации shell'ом).
Элементарные логические выражения могут комбинироваться с помощью следующих операций (в порядке уменьшения приоритета):
Унарная операция отрицания, обозначается !.
Логическое И, обозначается пробелом.
Логическое ИЛИ, обозначается -o.
Удалить все файлы с именами
a.out
или
*.o
, доступ к которым не производился в течение недели:
find / \( -name a.out -o -name '*.o' \) \
-atime +7 -exec rm {} \;
Удалить из текущего каталога и его подкаталогов все файлы нулевого размера, запрашивая подтверждение:
find . -size 0c -ok rm {} \;
Команда
find / -depth
всегда завершается неудачей с сообщением
find: stat failed: : No such file or directory
Она исправно обходит все файлы, кроме корневого каталога.