Утилита find#
Утилита 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/*'