find

Поиск файлов (POSIX)

Синтаксис:

find путь... [выражение_операнда] 
find [ограниченное_выражение_операнда]

Опции:

путь...
Путевые имена, в которых утилита find должна выполнить поиск файлов. Утилита проходит дерево путевых имен сверху вниз, начиная с этих файлов, и выполняет поиск файлов, удовлетворяющих критериям поиска, заданным выражением выражение_операнда. Если пути не указаны и выражение удовлетворяет критерию ограниченное_выражение_операнда (см. далее), то предполагается путь (.).
выражение_операнда
Выражение, составленное из любого набора первичных выражений и операторов, описанных ниже. Некоторые ссылки для помощи в поиске выражений: -abort | -amin | -anewer | -atime | -chgrp | -chmod | -chown | -cmin | -cnewer | -ctime | -daystart | -depth | -echo | -empty | -errmsg | -error | -exec | -exists | -false | -fanewer | -fcnewer | -fls | -fmnewer | -fnewer | -Fnewer | -follow | -fprint | -fprint0 | -fprintf | -gid | -group | -ilname | -iname | -inode | -inum | -ipath | -iregex | -level | -links | -lname | -logical | -ls | -maxdepth | -mindepth | -mmin | -mnewer | -mount | -mtime | -name | -newer | -nogroup | -NOP | -nouser | -ok | -path | -perm (symbolic) | -perm (octal) | -pname | -print | -print0 | -printf | -prune | -regex | -remove! | -rename | -size | -spawn | -true | -type | -uid | -used | -user | -xdev
Детально эти конструкции рассматриваются ниже.
ограниченное_выражение_операнда
Выражение, составленное из любых первичных выражений и операторов, описанных ниже, за исключением -exec, -ok и -spawn.

Платформы:

ЗОСРВ «Нейтрино»

Целевые архитектуры:

aarch64, arm, armv7, e2k, mips, ppc, x86

Описание:

Утилита find рекурсивно переходит вниз по уровням иерархии каталогов для каждого файла, заданного параметром путь, и выполняет поиск файлов, соответствующих выражение_операнда.

Если в командной строке не указано выражение_операнда или ограниченное_выражение_операнда, утилита find использует опцию -print (т.е. сопоставляет каждый файл и каталог, причем каждое путевое имя выводится в отдельной строке в стандартный поток вывода).

Выражение операнда следует за одним или несколькими путевыми именами. Утилита find принимает в качестве путевого имени все аргументы вплоть до первого, начинающегося с любого из следующих символов: -, ! и (.

Все последующее является частью выражения операнда.


Note: Некоторые операнды и шаблоны, вероятно, потребуется заключить в кавычки, в зависимости от используемого командного интерпретатора.

Выражения операнда состоят из первичных выражений и операторов. Поддерживаются следующие операторы:

!
Действие: (NOT)
-a
Действие: (AND)
-o
Действие: (OR)

Приоритет операторов AND выше, чем у операторов OR. Приоритет оператора отрицания (!) выше, чем у операторов AND. Для переопределения стандартных правил приоритета поддерживаются скобки.

К первичным выражениям и операторам применяются следующие правила:

Выражение Результат вычисления
-первичное_выражение Истинно, если первичное_выражение является истинным.
( выражение ) Истинно, если выражение является истинным.
! выражение (NOT) Отрицание первичного выражения или выражения, заключенного в скобки.
выражение [-a] выражение (AND) Истинно, если оба выражения являются истинными. Если первое выражение является ложным, второе выражение не вычисляется. Операнд -a является необязательным. AND подразумевается в случае смежности двух выражений (см. ниже).
выражение -o выражение (OR) Истинно, если любое из выражений истинно. Если первое выражение является истинным, второе выражение не вычисляется.

Как указано выше, операнд -a является необязательным. Для сопоставления файлов с двумя разными шаблонами удобной может оказаться следующая команда:

find . -name "*~" -o -name "*.o" -print

Однако она не обеспечивает ожидаемого результата из-за неявного операнда -a перед выражением -print. В соответствии с правилами приоритета приведенная выше команда эквивалентна следующей:

find . \( -name "*~" \) -o \( -name "*.o" -a -print \)

Команду необходимо вводить следующим образом:

find . \( -name "*~" -o -name "*.o" \) -print

Первичные выражения

Следует отметить, что если выражение не указано, утилита find ведет себя так, как будто указано выражение -print.

Если выражение указано, но в нем не содержатся какие-либо из следующих первичных выражений: -chmod, -chown, -exec, -fls, -fprint, -fprint0, -fprintf, -ls, -ok, -print, -print0, -printf, -rename, -remove! или -spawn, утилита find ведет себя так, как будто указано следующее выражение:

( данное_выражение ) -print

Если в первичном выражении используется число (n), перед ним допускается поставить знак плюс (+) или минус (-), который изменяет значение выражения следующим образом:

Выражение Значение
+n Больше n
-n Меньше n
n Ровно n

Если утилиту find предполагается использовать переносимым образом, удобно пользоваться следующей классификацией первичных выражений:

POSIX
Поддерживаются в любой реализации find POSIX.
GNU
Поддерживаются в реализациях find ЗОСРВ «Нейтрино» и GNU.
ЗОСРВ «Нейтрино»
Поддерживаются только в реализации ЗОСРВ «Нейтрино».

Доступны следующие первичные выражения:

-abort
(ЗОСРВ «Нейтрино») Немедленное прекращение работы утилиты find с ненулевым статусом завершения.
-amin n
(GNU) Истинно, если последний доступ к файлу осуществлялся n минут назад.
-anewer файл
(GNU) Истинно, если доступ к анализируемому файлу осуществлялся позже, чем к файлу файл.
-atime n
(POSIX) Истинно, если результат вычитания времени последнего доступа к файлу из времени запуска утилиты find лежит в интервале между (n - 1) * 24 часа и n * 24 часа. Например, вызов find . -atime 1 приводит к обнаружению всех файлов, расположенных в дереве каталогов глубже текущего каталога, доступ к которым выполнялся в течение последних 24 часов.
-chgrp имя_группы
(ЗОСРВ «Нейтрино») Изменение принадлежности к группе для анализируемого файла на группу имя_группы. Если в параметре имя_группы передано числовое значение и в базе данных групп такое имя отсутствует, то имя_группы обрабатывается как идентификатор группы. Выражение -chgrp подавляет автоматическое использование выражения -print, если в результате вычисления выражения в целом оно оказывается истинным.
-chmod режим
(ЗОСРВ «Нейтрино») Изменение прав доступа к файлу, анализируемому в настоящий момент, в соответствии с режимом, указанным в аргументе режим. Аргумент режим соответствует битам режима доступа к файлу. Его формат идентичен формату операнда симв_режим, описанного для утилиты chmod, и интерпретируется следующим образом. Режим файла имеет следующий формат: пользователь{оператор}права_доступа[,режим...], где: Например, для удаления прав на запись в анализируемый файл для группы и прочих пользователей следует использовать команду -chmod go-w. Выражение -chmod подавляет автоматическое использование выражения -print, если в результате вычисления выражения в целом оно оказывается истинным.
-chown имя_пользователя[:имя_группы]
(ЗОСРВ «Нейтрино») Изменить принадлежность анализируемого файла на указанного пользователя, синтаксис ввода пользователя аналогичен таковому для утилиты chown. Обязательно должно быть указано имя_пользователя, необязательным элементом является двоеточие (:) с именем_группы. Параметры имя_пользователя и имя_группы могут быть либо именами в формате ASCII, либо фактическими числовыми идентификаторами пользователя или группы.

Выражение -chown подавляет автоматическое использование выражения -print, если в результате вычисления выражения в целом оно оказывается истинным.
-cmin n
(GNU) Истинно, если последний раз статус файла был изменен n минут назад.
-cnewer файл
(GNU) Истинно, если статус анализируемого файла был изменен позже, чем статус файла файл.
-ctime n
(POSIX) Истинно, если результат вычитания времени изменения статуса файла из времени запуска утилиты find лежит в интервале между (n - 1) * 24 часа и n * 24 часа.
-daystart
(GNU) Всегда истинно. Если используется этот примитив, утилита find глобально изменяет поведение примитивов -atime, -ctime и -mtime: вместо сравнения значений времени, связанных с файлами, с n 24-часовыми периодами перед текущим временем, эти значения времени сравниваются с n 24- часовыми периодами перед началом текущего календарного дня.
-depth
(POSIX) Всегда истинно; при вводе этого выражения обход иерархии каталогов выполняется таким образом, что все дочерние элементы каталога обрабатываются до обработки собственно каталога. Если первичное выражение -depth не указано, дочерние элементы каталога обрабатываются после обработки собственно каталога. Если указано первичное выражение -depth, оно применяется ко всему выражению, даже если первичное выражение -depth обычно не вычислется.
-echo [текст] ;
(ЗОСРВ «Нейтрино») Вывести предоставленный текст в стандартный поток вывода. Если текст содержит фигурные скобки ({}), они интерпретируются аналогично примитиву -exec, как обозначение анализируемого путевого имени.

Выражение -echo подавляет автоматическое использование выражения -print, если в результате вычисления выражения в целом оно оказывается истинным.
-empty
(GNU) Истинно, если файл является обычным файлом размера 0, либо каталогом без файлов.
-errmsg [текст] ;
(ЗОСРВ «Нейтрино») Аналогично -echo, но вывод направляется в стандартный поток ошибок.

Выражение -errmsg подавляет автоматическое использование выражения -print, если в результате вычисления выражения в целом оно оказывается истинным.
-error
(ЗОСРВ «Нейтрино») По завершении работы утилиты find выдать ненулевой статус завершения. Это первичное выражение всегда является ложным, и обычно используется вместе с выражением -exec. Например, в случае ввода команды:

find /bin -type f \( -exec cmp {} /hd{} \; \ -o -error \)

работа утилиты find завершается с ненулевым статусом завершения, если какой-либо из файлов в каталоге /bin не был успешно сравнен с таким же файлом в каталоге /hd/bin.
-exec имя_утилиты [аргумент...] ;
(POSIX) Истинно, если исполняемая утилита имя_утилиты возвращает нулевое значение в качестве статуса завершения. Конец первичного выражения обозначается точкой с запятой (;).

Если параметры имя_утилиты или аргумент содержат {...}, то последовательность символов {...} заменяется текущим путевым именем или его частью следующим образом: Последовательность {} в параметрах имя_утилиты или аргумент заменяется анализируемым путевым именем. Такие аргументы используются также первичными выражениями -echo, -errmsg, -exists, -fanewer, -fcnewer, -fmnewer, -fnewer, -ok, -rename и -spawn в дополнение к -exec.

Текущий каталог для запуска утилиты имя_утилиты совпадает с текущим каталогом запуска утилиты find.

Выражение -exec подавляет автоматическое использование выражения -print, если в результате вычисления выражения в целом оно оказывается истинным.

В ЗОСРВ «Нейтрино» используется собственное расширение синтаксиса {} для отбрасывания ведущих и завершающих символов. Также можно вставить имя файла, очищенное от ряда символов с конца (strip) или с начала (skip). Используется следующий синтаксис:

{[strip][,skip]}

Таким образом, для перемещения (переименования) всех файлов, заканчивающихся на .c, в целевые файлы с такими же именами, но заканчивающимися на .C, можно воспользоваться следующей командой:

find . -type f -name '*.c' \ -exec 'mv {} {1}C' \;
-exists строка_файла
(ЗОСРВ «Нейтрино») Истинно, если существует файл, заданный параметром строка_файла. Параметр строка_файла может представлять собой простое имя файла или содержать фигурные скобки ({}), обозначающие имя файла, анализируемого в текущий момент, аналогично синтаксису примитива -exec.
-false
(GNU) Всегда ложно.
-fanewer строка_файла
(ЗОСРВ «Нейтрино») Истинно, если доступ к файлу был осуществлен позже, чем к файлу, указанному параметром строка_файла.
-fcnewer строка_файла
(ЗОСРВ «Нейтрино») Истинно, если статус файла был изменен позже, чем статус файла, указанного параметром строка_файла.
-fls файл
(GNU) Всегда истинно. Аналогично параметру -ls, но вывод направляется в файл, а не в стандартный поток вывода.

Выражение -fls подавляет автоматическое использование выражения -print, если в результате вычисления выражения в целом оно оказывается истинным.
-fmnewer строка_файла
(ЗОСРВ «Нейтрино») Истинно, если файл был изменен позже, чем файл, указанный параметром строка_файла.
-fnewer строка_файла
(ЗОСРВ «Нейтрино») Синоним -fmnewer (см. выше).
-Fnewer файл
(ЗОСРВ «Нейтрино») Истинно, если анализируемый файл создан позже, чем файл.
-follow
(GNU) Всегда истинно. Если указано первичное выражение -follow, утилита find считает, что символьные ссылки имеют тип файла, на который они указывают. Если ссылка указывает на каталог, find рекурсивно переходит в этот каталог. По умолчанию символьные ссылки обрабатываются как особые файлы типа "символьная ссылка". С точки зрения стандартного поведения find неважно, куда они указывают.
-fprint файл
(GNU) Аналогично -print, но вывод направляется в файл, а не в стандартный поток вывода.

Выражение -fprint подавляет автоматическое использование выражения -print, если в результате вычисления выражения в целом оно оказывается истинным.
-fprint0 файл
(GNU) Аналогично -print, но каждое имя файла завершается символом NUL вместо символа новой строки, и вывод направляется в файл, а не в стандартный поток вывода.

Выражение -fprint0 подавляет автоматическое использование выражения -print, если в результате вычисления выражения в целом оно оказывается истинным.
-fprintf файл формат
(GNU) Всегда истинно. Запись данных, относящихся к анализируемому файлу, в файл в соответствии с указанным форматом. Для получения дополнительной информации о строке формата см. раздел "Печать форматированных данных".

Выражение -fprintf подавляет автоматическое использование выражения -print, если в результате вычисления выражения в целом оно оказывается истинным.
-gid n|имя_группы
(GNU) Синоним для -group.
-group имя_группы
(POSIX) Истинно, если файл принадлежит группе имя_группы. Если значение имя_группы является числовым и такое имя отсутствует в базе данных групп, подразумевается, что в параметре имя_группы указан идентификатор группы. Обратите внимание, что имя_группы вычисляется только один раз.
-ilname шаблон_файла
(GNU) Аналогично -lname, но без учета регистра при сопоставлении с шаблоном.
-iname шаблон_файла
(GNU) Аналогично -name, но без учета регистра при сопоставлении с шаблоном.
-inode файл|n
(ЗОСРВ «Нейтрино») Истинно, если файлом используется тот же индексный дескриптор (такой же порядковый номер), что и файлом с именем файл. Если указанный файл не существует и значение является числовым, это число обрабатывается как порядковый номер, с которым требуется выполнить сопоставление. Это первичное выражение используется для поиска ссылок на файл.
-inum n|файл
(GNU) Синоним для -inode.
-ipath шаблон_файла
(GNU) Аналогично -path, но без учета регистра при обработке сопоставления с шаблоном.
-iregex ere
(GNU) Аналогично -regex, но без учета регистра при обработке сопоставления с шаблоном.
-level n
(ЗОСРВ «Нейтрино») Истинно, если выполняется обработка на уровне глубины n в дереве каталогов. Уровень 0 отсчитывается от файла или каталога, указанного в командной строке. Например, рассмотрим следующую команду:

find /usr -level 1 -type d \ -print -o \ -level 2 -prune -type f \ -name .usrinit -ls

Эта команда выводит все каталоги в /usr и для каждого каталога, содержащего файл .usrinit, выводит информацию об этом файле в формате ls -l. (Первичное выражение -prune на уровне 2 предотвращает избыточную обработку при обходе дерева каталогов. Несмотря на то, что файлы на более глубоких уровнях в дереве каталогов не могут удовлетворять критериям -level 1 или -level 2, утилита find не определяет подобную ситуацию автоматически: выражение командной строки применяется к каждому файлу в дереве каталогов, если полная рекурсия дерева не предотвращена примитивом -prune). Рассмотрим следующую команду:

find /usr -level 1 -ls -prune

Эта команда выводит информацию в формате ls -l только для файлов в /usr без перехода в подкаталоги /usr.
-links n
(POSIX) Истинно, если существует n ссылок на файл.
-lname шаблон_файла
(GNU) Истинно, если не указано первичное выражение -follow и -logical и анализируемый файл является символьной ссылкой, указывающей на путевое имя, удовлетворяющее шаблону шаблон_файла.
-logical
(ЗОСРВ «Нейтрино») Синоним для -follow.
-ls
(GNU) Аналогично -print, но вывод осуществляется в формате утилиты ls -l.

Выражение -ls подавляет автоматическое использование выражения -print, если в результате вычисления выражения в целом оно оказывается истинным.
-maxdepth n
(GNU) Всегда истинно. Если этот флаг установлен, то утилита find переходит не более чем на n уровней вниз в иерархии каталогов. Файлы, указанные по имени в командной строке, принимаются за уровень 0. Обратите внимание: модификаторы + и - не имеют смысла при использовании с параметром n этого первичного выражения.
-mindepth n
(GNU) Всегда истинно. Если этот флаг установлен, то утилита find применяет выражение к файлам только в том случае, если они находятся на n уровне в иерархии каталогов или на более глубоких уровнях. Файлы, указанные по имени в командной строке, принимаются за уровень 0. Обратите внимание: модификаторы + и - не имеют смысла при использовании с параметром n этого первичного выражения.
-mmin n
(GNU) Истинно, если данные файла последний раз были изменены n минут назад.
-mnewer файл
(ЗОСРВ «Нейтрино») Истинно, если анализируемый файл был изменен позднее, чем файл файл.
-mount
(GNU) Синоним для -xdev.
-mtime n
(POSIX) Истинно, если результат вычитания времени изменения файла из времени запуска утилиты find лежит в интервале между (n - 1) * 24 часа и n * 24 часа.
-name шаблон
(POSIX) Истинно, если базовая часть имени анализируемого файла совпадает с шаблоном. Используются те же правила сопоставления с шаблоном, что и правила, используемые функцией fnmatch().
-newer файл
(GNU) Истинно, если текущий файл был изменен позднее, чем файл, заданный параметром файл. Обратите внимание, что файл анализируется только один раз.
-nogroup
(POSIX) Истинно, если файл принадлежит группе с идентификатором, который отсутствует в базе данных групп.
-NOP
(ЗОСРВ «Нейтрино») Всегда истинно; какие-либо действия не выполняются. Этот примитив вызывает побочный эффект деактивации неявного выражения -print, имеющий место в случае истинности выражения в целом. С помощью этого примитива можно измерить время обхода файловой системы. Пример:

find / -NOP
-nouser
(POSIX) Истинно, если файл принадлежит пользователю с идентификатором, который отсутствует в базе данных паролей.
-ok имя_утилиты [аргумент...] ;
(POSIX) Аналогично -exec, но в этом случае утилита find запрашивает подтверждение выполнения утилиты имя_утилиты с текущим файлом в качестве аргумента. Запрос подтверждения выдается в стандартный поток ошибок. Если ответ из стандартного потока ввода утвердительный, утилита выполняется. Если ответ не утвердительный, то команда не выполняется и операнд -ok возвращает ложное значение.

Выражение -ok подавляет автоматическое использование выражения -print, если в результате вычисления выражения в целом оно оказывается истинным.
-path шаблон_файла
(GNU) Истинно для всех файлов, путь к которым (в формате, выводимом -print) совпадает с шаблоном шаблон_файла.
-perm [-]режим
(POSIX) Аргумент режим представляет собой биты режима доступа к файлу. Его формат идентичен формату операнда симв_режим, описанного для утилиты chmod, и интерпретируется следующим образом. Для начала предполагается шаблон, в котором все биты режима сняты. Символ оператора для:
Оператор Действие
+ Установка соответствующих битов режима
- Сброс соответствующих битов режима
= Установка соответствующих битов режима, независимо от маски создания режима доступа к файлу, используемой процессом
Символ оператора "-" не может быть первым символом аргумента режим.

Если необязательный дефис перед параметром режим не указан, первичное выражение является истинным, если биты прав доступа к файлу точно совпадают со значением итогового шаблона. Кроме того, биты, связанные с символом права_доступа игнорируются. Если дефис указан, то первичное выражение является истинным, если установлены по крайней мере все биты, присутствующие в итоговом шаблоне.
-perm [-] восьмеричное_число
(POSIX) Если необязательный дефис не указан, то первичное выражение является истинным в случае точного совпадения битов прав доступа к файлу с восьмеричным значением восьмеричное_число, причем сравниваются только биты, соответствующие восьмеричной маске 777.

Если дефис указан, то выполняется сравнение дополнительных битов, соответствующих восьмеричной маске 06777. Первичное выражение при этом является истинным, если установлены по крайней мере все биты, присутствующие в значении параметра восьмеричное_число.
-pname шаблон
(ЗОСРВ «Нейтрино») Синоним для -path.
-print
(POSIX) Всегда истинно; текущее путевое имя выводится в стандартный поток вывода, по одному путевому имени на строку.

Выражение -print подавляет автоматическое использование выражения -print, если выражение в целом является истинным.
-print0
(GNU) Всегда истинно. Текущий анализируемый путь выводится в стандартный поток вывода с ASCII-символом NUL в конце.

Выражение -print0 подавляет автоматическое использование выражения -print, если выражение в целом является истинным.
-printf формат
(GNU) Всегда истинно. Запись данных, относящихся к анализируемому файлу, в стандартный поток вывода в соответствии с указанным форматом. Для получения дополнительной информации см. раздел "Печать форматированных данных" ниже.

Выражение -printf подавляет автоматическое использование выражения -print, если выражение в целом является истинным.
-prune
(POSIX) Останавливает переход утилиты find на более глубокие уровни в дереве каталогов с указанной точки в иерархии файлов.
-regex расширенное_регулярное_выражение
(GNU) Истинно, если путевое имя анализируемого файла совпадает с расширенным регулярным выражением, указанным в параметре расширенное_регулярное_выражение. Для получения дополнительной информации о регулярных выражениях см. документацию по утилите grep.
-remove!
(ЗОСРВ «Нейтрино») Удаляет анализируемый файл. Если файл является каталогом, выполняется команда rmdir(), в противном случае выполняется попытка вызова функции unlink() для файла.

Если каталог не является пустым, попытка его удаления будет неуспешной. Следовательно, для рекурсивного удаления дерева каталогов утилитой find вместе с -remove! необходимо использовать примитив -depth. (Обратите внимание, что для обычного удаления дерева каталогов можно применить более простой и переносимый способ – использовать утилиту rm.)

Значение примитива является истинным, если удаление завершилось успешно. Важно отметить, что восклицательный знак (!) является неотъемлемой частью примитива.

Выражение -remove! подавляет автоматическое использование выражения -print, если в результате вычисления выражения в целом оно оказывается истинным.
-rename строка_файла
(ЗОСРВ «Нейтрино») Переименовывает файл в путевое имя, заданное параметром строка_файла. Аналогично другим аргументам строка_файла, вместо фигурных скобок ({}), включенных в строку, подставляется имя анализируемого файла. Переименование файла допускается везде в пределах одной файловой системы. Если новый путь указывает на другое устройство, то переименование завершается неуспешно. Выражение является истинным, если переименование было успешным, и ложным, если неуспешным.

Выражение -rename подавляет автоматическое использование выражения -print, если в результате вычисления выражения в целом оно оказывается истинным.
-size n[c]
(POSIX) Истинно, если размер файла в байтах, деленный на 512 и округленный до следующего целого числа, равен n. Если за аргументом n следует аргумент c, размер указывается в байтах.
-spawn cmd [аргументы]... ;
(ЗОСРВ «Нейтрино») Аналогично -exec, но команда вызывается напрямую (т.е. не посредством командного интерпретатора). Первичное выражение -spawn работает быстрее -exec, но лишено его гибкости.

Выражение -spawn подавляет автоматическое использование выражения -print, если в результате вычисления выражения в целом оно оказывается истинным.
-true
(GNU) Всегда истинно.
-type c
(POSIX) Истинно, если тип файла – c, где c может принимать одно из следующих значений:
Тип файла Описание
b Блок-ориентированный специальный файл
c Байт-ориентированный специальный файл
d Каталог
p FIFO
f Обычный файл
l Символьная ссылка
n Именованный специальный файл
-uid n|идентификатор_пользователя
(GNU) Синоним для -user.
-used n
(GNU) Истинно, если последний доступ к файлу был осуществлен через n дней после последнего изменения статуса файла.
-user имя_пользователя
(POSIX) Истинно, если файл принадлежит пользователю имя_пользователя. Если значение имя_пользователя является числовым и такое имя отсутствует в базе данных паролей, подразумевается, что в параметре имя_пользователя указан идентификатор пользователя. Обратите внимание, что имя_пользователя вычисляется только один раз.
-xdev
(POSIX) Всегда истинно: не позволяет утилите find переходить на более глубокие уровни каталогов, имеющих другой идентификатор устройства. Если указано первичное выражение -xdev, то оно относится ко всему выражению, даже если первичное выражение -xdev обычно не вычисляется.

Печать форматированных данных (примитивы -printf и -fprintf)

В первичных выражениях -printf и -fprintf в качестве аргумента необходимо указать строку формата, аналогичную по виду используемой в функции printf() языка C. Строка формата состоит из стандартных символов в коде ASCII и ряда специальных кодов, начинающихся с символа процента (%), кодов формата и управляющих последовательностей, начинающихся с символа обратной косой черты (\).

Управляющие последовательности с символом обратной косой черты (\)

\\
Литерал "символ обратной косой черты" (\).
\a
Зуммер.
\b
Символ возврата на одну позицию.
\c
Прекратить печать формата и очистить буфер вывода.
\f
Символ перевода страницы.
\n
Символ новой строки.
\r
Символ возврата каретки.
\v
Символ вертикальной табуляции.

Коды формата

%%
Литерал символ процента (%).
%p
Анализируемое в настоящий момент путевое имя.
%f
Базовое имя ( basename) файла.
%h
Имя каталога ( dirname) для файла.
%P
Имя файла с удаленным из начала корнем дерева файлов (путевым именем, указанным в командной строке).
%H
Имя корня дерева файлов (путевое имя, указанное в командной строке, по которому был найден текущий файл).
%g
Имя группы файла или числовой идентификатор группы, если имя не найдено.
%G
Числовой идентификатор группы файла.
%u
Имя пользователя файла или числовой идентификатор пользователя, если имя не найдено.
%U
Числовой идентификатор пользователя файла.
%m
Права доступа к файлу в восьмеричном формате.
%k
Размер файла в блоках по 1 КБ (с округлением в большую сторону).
%b
Размер файла в блоках по 512 байтов (с округлением в большую сторону).
%s
Размер файла в байтах.
%d
Глубина расположения файла в дереве каталогов. Файлы, указанные в командной строке, находятся на глубине 0.
%l
Если файл является символьной ссылкой – имя файла, на который указывает ссылка. Пустая строка, если файл не является символьной ссылкой.
%i
Индексный дескриптор файла.
%n
Количество ссылок на файл.
%a
Дата и время последнего доступа к файлу; эквивалентно %Ac.
%Aсимвол_формата
Частичное или полное представление времени последнего доступа к файлу, в зависимости от символа управления форматом символ_формата:
символ_формата Заменяется на:
a Сокращенное название дня недели
A Полное название дня недели
b Сокращенное название месяца
B Полное название месяца
c Представление даты и времени в соответствии с настройкой локализации
d День месяца в виде десятичного числа (01-31)
D Дата в формате мм/дд/гг
h Сокращенное название месяца
H Час (24-часовое представление) в виде десятичного числа (00-23)
I Час (12-часовое представление) в виде десятичного числа (01-12)
j День года в виде десятичного числа (001-366)
m Месяц в виде десятичного числа (01-12)
M Минута в виде десятичного числа
n Символ новой строки
p AM или PM (для 12-часового представления)
r Время в 12-часовом представлении (01-12) в нотации AM/PM, т.е. чч:мм:сс (AM|PM)
S Секунда в виде десятичного числа (00-59)
t Символ табуляции
T Время в 24-часовом представлении (00-23) чч:мм:сс
U Номер недели года в виде десятичного числа (00-52), первым днем недели считается воскресенье
w День недели в виде десятичного числа (0-6), где 0 – воскресенье
W Номер недели года в виде десятичного числа (00-52), первым днем недели считается понедельник
x Дата в соответствии с настройкой локализации
X Время в соответствии с настройкой локализации
y Последние две цифры года в виде десятичного числа
Y Четыре цифры года в виде десятичного числа
Z Имя часового пояса; NULL, если часовой пояс отсутствует

Note: В ЗОСРВ «Нейтрино» в настоящее время поддерживается только настройка локализации POSIX (т.е. C).

%c
Время и дата последнего изменения статуса файла; эквивалент %Cc
%Cсимвол_формата
Частичное или полное представление времени последнего изменения статуса файла, в зависимости от символа управления форматом символ_формата: Для получения подробной информации см. описание %A выше.
%t
Время и дата последнего изменения файла; эквивалент %Tc
%Tсимвол_формата
Частичное или полное представление времени последнего изменения файла, в зависимости от символа управления форматом символ_формата. Для получения подробной информации см. в описании %A выше.

Примеры:

Поиск файла или каталога myfile в файловой системе:

find / -name myfile

Удалить все файлы с именем tmp или заканчивающиеся на .xx, доступ к которым не осуществлялся в течение семи или более 24-часовых периодов:

find / \( -name tmp -o -name '*.xx' \) \ -atime +7 -exec rm {} \;

Вывести путевые имена всех файлов в текущем каталоге и на более глубоких уровнях в иерархии, однако все каталоги с именем SCCS и файлы в них следует пропустить:

find . -name SCCS -prune -o -print

Обратите внимание, что при наличии возможности предпочтительно запускать команды с помощью утилиты find в комбинации с утилитой xargs, а не с помощью первичных выражений -exec или -spawn. Утилита xargs позволяет запустить программу один раз для нескольких файлов; выражения -exec или -spawn запускают программу для каждого сопоставленного файла. Разница в производительности между этими двумя подходами разительная. Пример:

find / -name '*.tmp' | xargs rm

обычно предпочтительнее, чем:

find / -name '*.tmp' -exec rm {} \;

Для получения подробной информации см. в описании утилиты xargs.

Возвращаемое значение:

0
Все операнды пути успешно пройдены.
>0
Возникла ошибка.

Предостережения:

В случае использования -exec, -ok или -spawn утилита find перехватывает SIGINT (который можно сгенерировать, например, нажатием Ctrl + C или Ctrl + Break) и выдает запрос на продолжение или прекращение работы утилиты find. Если эти первичные выражения не используются, то при получении SIGINT работа утилиты find прекращается.

Классификация:

Базовые подсистемы ЗОСРВ «Нейтрино», POSIX

Тематические ссылки:

chmod, chown, mv, pax, rm, xargs




Предыдущий раздел: Утилиты