Утилита find#
Описание#
Утилита find используется для поиска файлов в иерархии каталогов.
Синтаксис утилиты:
find <options> <path> <expression>
Где:
<options>— опции;<path>— путь для поиска, если не указан, то используется текущий каталог;<expression>— выражение, описывающее то, что необходимо найти.
Опции#
Часто используемые опции утилиты представлены в таблице ниже.
Опция |
Описание |
|---|---|
|
Запретить переход по символическим ссылкам; поведение по умолчанию, информация для поиска берется из свойств ссылки |
|
Перейти по символическим ссылкам, т.е. информация о файле будет браться из свойств файла, а не из ссылки; при обнаружении символической ссылки на подкаталог будет выполнен поиск в данном подкаталоге |
|
Запретить переход по символьным ссылкам, за исключением случаев, когда файл, указанный в командной строке, является символьной ссылкой |
Выражения#
Выражение для поиска файлов состоит из:
параметров — влияют на общую работу, а не на обработку конкретного файла, и всегда возвращают значение
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