FIND(1) FIND(1) НАЗВАНИЕ find - поиск файлов СИНТАКСИС |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'ом). Элементарные логические выражения могут комбинироваться с помощью следующих операций (в порядке уменьшения при- оритета): 1. Унарная операция отрицания, обозначается !. 2. Логическое И, обозначается пробелом. 3. Логическое ИЛИ, обозначается -o. ПРИМЕРЫ 1. Удалить все файлы с именами a.out или *.o, доступ к которым не производился в течение недели: |find / \( -name a.out -o -name '*.o' \) \ | -atime +7 -exec rm {} \; 2. Удалить из текущего каталога и его подкаталогов все файлы нулевого размера, запрашивая подтверждение: |find . -size 0c -ok rm {} \; ФАЙЛЫ /etc/passwd /etc/group СМ. ТАКЖЕ chmod(1), cpio(1), sh(1), test(1). stat(2), umask(2), cpio(4), fs(4) в Справочнике прог- раммиста. СЮРПРИЗЫ Команда |find / -depth всегда завершается неудачей с сообщением find: stat failed: : No such file or directory Она исправно обходит все файлы, кроме корневого катало- га.