Утилита find#

Описание#

Утилита find используется для поиска файлов в иерархии каталогов.

Синтаксис утилиты:

find <options> <path> <expression>

Где:

  • <options> — опции;

  • <path> — путь для поиска, если не указан, то используется текущий каталог;

  • <expression> — выражение, описывающее то, что необходимо найти.

Опции#

Часто используемые опции утилиты представлены в таблице ниже.

Опции find#

Опция

Описание

-P

Запретить переход по символическим ссылкам; поведение по умолчанию, информация для поиска берется из свойств ссылки

-L

Перейти по символическим ссылкам, т.е. информация о файле будет браться из свойств файла, а не из ссылки; при обнаружении символической ссылки на подкаталог будет выполнен поиск в данном подкаталоге

-H

Запретить переход по символьным ссылкам, за исключением случаев, когда файл, указанный в командной строке, является символьной ссылкой

Выражения#

Выражение для поиска файлов состоит из:

  • параметров — влияют на общую работу, а не на обработку конкретного файла, и всегда возвращают значение true;

  • тестов — возвращают значение true или false;

  • действий — имеют побочные эффекты, возвращают значение true или false.

Указанные аргументы выражения разделяются операторами, в случае отсутствия оператора за его значение принимается -and.

Если выражение не содержит никаких действий, кроме -prune, то для всех файлов, для которых выражение истинно, выполняется -print.

Примеры параметров выражения:

  • -depth - обработка сначала содержимого каждого каталога, а затем самого каталога;

  • -maxdepth <levels> - задание максимального уровня используемых каталогов; большинство уровней каталогов находятся ниже аргументов командной строки; -maxdepth 0 означает, что тесты и действия применяются только к аргументам командной строки;

  • -mindepth <levels> - задание минимального уровня используемых каталогов для применения тестов и действий; -mindepth 1 означает обработку всех файлов, кроме аргументов командной строки;

  • -warn, -nowarn - включение или выключение предупреждающих сообщений для командной строки;

  • -xdev - запрет на использование каталогов в других файловых системах.

Примеры тестов выражения:

  • +<n>, -<n>, <n> — для значений, превышающих/меньших чем/равных n соответственно;

  • -cmin <n> — для файлов, статус которых в последний раз менялся n минут назад;

  • -iname <pattern> — поиск определенного шаблона в именах файлов независимо от регистра;

  • -name <pattern> — поиск определенного шаблона в именах файлов;

  • -nouser - ни один пользователь не соответствует числовому id пользователя, указанному в файле;

  • -path - поиск по указанному пути;

  • -type - поиск по типу файла, например, d - каталог, f - обычный файл, s - сокет.

Примеры действий выражения:

  • -delete - удалить файлы; если удаление завершилось успешно - true; если неудачно, то выдается сообщение об ошибке;

  • -exec <command> - выполнить указанную команду; значение true, если возвращен статус 0;

  • -prune - если значение -depth не задано, то true, и если файл является каталогом, то вход в него не будет выполняться; если значение -depth задано, то false, без эффекта;

  • -print - значение true, в стандартном выводе отображается полное имя файла, за которым следует новая строка.

Примеры операторов для выражения:

  • ( expression ) - принудительный приоритет;

  • ! expression или -not - true, если значение expression равно false - инвертирование последующего выражения;

  • expression1 -o expression2 - «или», значение expression2 не вычисляется, если значение expression1 равно true.

Примеры использования#

  • Для поиска файлов по расширению, например, .ext, введите команду:

    find root_path -name '*.ext'
    

    Где root_path - это путь к корню дерева каталогов, относительно которого читаются файлы.

  • Для поиска каталогов, содержащих в имени lib, без учета регистра введите команду:

    find root_path -type d -iname '*lib*'
    
  • Для поиска файлов с расширением .py, исключая каталог /site-packages/, введите команду:

    find root_pathname '*.py' -not -path '*/site-packages/*'
    

Дополнительная информация#

Дополнительную информацию можно получить, выполнив команду:

man find

Или:

find --help