- СИНТАКСИС
- ОПИСАНИЕ
- ОПЦИИ
- ВЫРАЖЕНИЕ
- НЕОБЫЧНЫЕ ИМЕНА ФАЙЛОВ
- СООТВЕТСТВИЕ СТАНДАРТАМ
- ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ
- ПРИМЕРЫ
- Простой подход find|xargs
- Более безопасный подход к использованию find -print0 | xargs -0
- Обработка произвольных начальных точек
- Выполнение команды для каждого файла
- Однократный обход файловой системы для двух различных действий
- Поиск файлов по времени изменения
- Поиск файлов по разрешениям
- Исключение файлов и подкаталогов
- Другие полезные примеры
- СТАТУС ВЫХОДА
- ИСТОРИЯ
- СОВМЕСТИМОСТЬ
- НЕ ЯВЛЯЮТСЯ ОШИБКАМИ
- ОШИБКИ
- СООБЩЕНИЕ ОБ ОШИБКАХ
- АВТОРСКИЕ ПРАВА
- ССЫЛКИ
find - поиск файлов в иерархии каталогов
СИНТАКСИС
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [начальная_точка...] [выражение]
ОПИСАНИЕ
Эта страница руководства документирует версию GNU команды find. GNU find выполняет поиск в дереве каталогов, начинающемся в каждой заданной начальной точке, путем оценки данного выражения слева направо в соответствии с правилами приоритета (см. раздел ОПЕРАТОРЫ), пока результат не станет известен (левая часть выражения ложна для операций and, истинна для операций or), после чего find переходит к следующему имени файла. Если начальная точка не указана, предполагается ..
Если вы используете find в среде, где важна безопасность (например, при поиске в каталогах, доступных для записи другим пользователям), вам следует прочитать главу «Соображения безопасности» документации findutils под названием «Поиск файлов», которая поставляется вместе с findutils. В этом документе содержится гораздо больше подробностей и обсуждений, чем в этой странице руководства, поэтому вы можете найти его более полезным источником информации.
ОПЦИИ
Опции -H, -L и -P управляют обработкой символических ссылок. Аргументы командной строки, следующие за этими опциями, интерпретируются как имена файлов или каталогов, подлежащих проверке, до первого аргумента, начинающегося с -, или аргумента ( или !. Этот аргумент и все последующие аргументы интерпретируются как выражение, описывающее, что нужно искать. Если пути не указаны, используется текущий каталог. Если выражение не указано, используется выражение -print (но, возможно, следует использовать -print0 вместо этого).
Эта страница руководства описывает «опции» в списке выражений. Эти опции управляют поведением find, но указываются непосредственно после последнего имени пути. Пять «реальных» опций -H, -L, -P, -D и -O должны появляться перед первым именем пути, если они вообще используются. Теоретически, двойной дефис -- может использоваться для указания того, что все оставшиеся аргументы не являются опциями, но это не совсем работает из-за того, как find определяет конец следующих аргументов пути: он делает это, читая до тех пор, пока не встретится аргумент выражения (который также начинается с -). Теперь, если аргумент пути начинается с -, то find будет рассматривать его как аргумент выражения. Таким образом, чтобы гарантировать, что все начальные точки будут интерпретироваться как таковые, и, в частности, чтобы предотвратить ошибочное интерпретирование шаблонов подстановки, расширяемых оболочкой, как аргументов выражения, обычно безопаснее добавлять к именам путей, начинающимся с -, префикс ./ или использовать абсолютные имена путей, начинающиеся с /. Кроме того, обычно безопасно, хотя и не портативно, использовать опцию GNU -files0-from для передачи произвольных начальных точек в find.
-P Никогда не следовать символическим ссылкам. Это поведение по умолчанию. Когда find проверяет или выводит информацию о файлах, и файл является символической ссылкой, информация, используемая, должна быть взята из свойств самой символической ссылки.
-L Следовать символическим ссылкам. Когда find проверяет или выводит информацию о файлах, информация, используемая, должна быть взята из свойств файла, на который указывает ссылка, а не из самой ссылки (если это не сломанная символическая ссылка или find не может проверить файл, на который указывает ссылка). Использование этой опции подразумевает -noleaf. Если позже вы используете опцию -P, -noleaf все равно будет действовать. Если -L действует и find обнаруживает символическую ссылку на подкаталог во время поиска, содержимое подкаталога, на который указывает символическая ссылка, будет просмотрено.
Когда опция -L действует, предикат -type всегда будет соответствовать типу файла, на который указывает символическая ссылка, а не самой ссылке (если символическая ссылка не является сломанной). Действия, которые могут привести к тому, что символические ссылки станут недействительными во время выполнения find (например, -delete), могут привести к запутанному поведению. Использование -L приводит к тому, что предикаты -lname и -ilname всегда возвращают false.
-H Не следовать символическим ссылкам, за исключением обработки аргументов командной строки. Когда find проверяет или выводит информацию о файлах, информация, используемая, должна быть взята из свойств самой символической ссылки. Единственное исключение из этого поведения возникает, когда файл, указанный в командной строке, является символической ссылкой, и ссылку можно разрешить. В этом случае информация берется из того, на что указывает ссылка (то есть ссылка прослеживается). Информация о самой ссылке используется в качестве резервного варианта, если файл, на который указывает символическая ссылка, не может быть проверен. Если -H действует, и один из путей, указанных в командной строке, является символической ссылкой на каталог, содержимое этого каталога будет проверено (хотя -maxdepth 0 предотвратит это).
Если указано более одной из опций -H, -L и -P, каждая из них переопределяет другие; последняя, указанная в командной строке, имеет приоритет. Поскольку это поведение по умолчанию, следует считать, что опция -P действует, если не указана ни -H, ни -L.
GNU find часто выполняет статистический анализ файлов во время обработки самой командной строки, до начала какого-либо поиска. Эти опции также влияют на то, как обрабатываются эти аргументы. В частности, существует ряд тестов, которые сравнивают файлы, перечисленные в командной строке, с файлом, который мы в данный момент рассматриваем. В каждом случае файл, указанный в командной строке, был проверен, и некоторые из его свойств были сохранены. Если указанный файл фактически является символической ссылкой, и действует опция -P (или если не указана ни -H, ни -L), информация, используемая для сравнения, будет взята из свойств самой символической ссылки. В противном случае она будет взята из свойств файла, на который указывает ссылка. Если find не может проследить ссылку (например, из-за недостаточных прав или потому, что ссылка указывает на несуществующий файл), будут использованы свойства самой ссылки.
Если опции -H или -L активны, любые символические ссылки, указанные в качестве аргумента для -newer, будут разыменованы, и временная метка будет взята из файла, на который указывает символическая ссылка. То же самое относится и к -newerXY, -anewer и -cnewer.
Опция -follow имеет аналогичный эффект, что и -L, но она действует с момента ее появления (то есть, если -L не используется, но используется -follow, любые символические ссылки, появляющиеся после -follow в командной строке, будут разыменованы, а те, что до него, - нет).
-D debugopts
Выводит диагностическую информацию; это может быть полезно для диагностики проблем, из-за которых find не выполняет то, что от него ожидается. Список опций отладки должен быть разделен запятыми. Совместимость опций отладки не гарантируется между разными версиями findutils. Для получения полного списка допустимых опций отладки см. вывод команды find -D help. Допустимые опции отладки включают:
exec Выводит диагностическую информацию, относящуюся к -exec, -execdir, -ok и -okdir.
opt Выводит диагностическую информацию, относящуюся к оптимизации дерева выражений; см. опцию -O.
rates Выводит сводку, указывающую, как часто каждое предикат выполнялось успешно или неудачно.
search Подробно описывает процесс обхода дерева каталогов.
stat Выводит сообщения при проверке файлов с использованием системных вызовов stat и lstat. Программа find пытается минимизировать количество таких вызовов.
tree Отображает дерево выражений в исходной и оптимизированной форме.
all Включает все остальные опции отладки (но не help).
help Объясняет опции отладки.
-Olevel
Включает оптимизацию запросов. Программа find переупорядочивает тесты для ускорения выполнения, сохраняя при этом общий эффект; то есть предикаты с побочными эффектами не переупорядочиваются относительно друг друга. Оптимизации, выполняемые на каждом уровне оптимизации, следующие:
0 Эквивалентно уровню оптимизации 1.
1 Это уровень оптимизации по умолчанию, соответствующий традиционному поведению. Выражения переупорядочиваются таким образом, чтобы тесты, основанные только на именах файлов (например, -name и -regex), выполнялись первыми.
2 Любые тесты -type или -xtype выполняются после любых тестов, основанных только на именах файлов, но перед любыми тестами, требующими информацию из inode. Во многих современных версиях Unix типы файлов возвращаются функцией readdir(), и поэтому эти предикаты быстрее оценивать, чем предикаты, которым необходимо сначала выполнить stat файла. Если вы используете предикат -fstype FOO и указываете тип файловой системы FOO, который не известен (то есть отсутствует в /etc/mtab) в момент запуска find, этот предикат эквивалентен -false.
3 На этом уровне оптимизации включен полнофункциональный оптимизатор запросов, основанный на стоимости.
Порядок проверок изменен таким образом, что сначала выполняются дешевые (т. е. быстрые) проверки, а более дорогие – при необходимости, позже. В рамках каждой полосы стоимости предикаты оцениваются раньше или позже в зависимости от того, вероятно ли, что они будут успешными или нет. Для -o предикаты, которые, вероятно, будут успешными, оцениваются раньше, а для -a – предикаты, которые, вероятно, не будут успешными, оцениваются раньше.
Оптимизатор, основанный на стоимости, имеет фиксированное представление о том, насколько вероятно, что та или иная проверка будет успешной. В некоторых случаях вероятность учитывает конкретный характер проверки (например, считается, что проверка -type f с большей вероятностью будет успешной, чем проверка -type c). В настоящее время оптимизатор, основанный на стоимости, находится в стадии оценки. Если он не улучшит производительность find, он будет удален. И наоборот, оптимизации, которые окажутся надежными, устойчивыми и эффективными, со временем могут быть включены на более низких уровнях оптимизации. Однако поведение по умолчанию (т. е. уровень оптимизации 1) не будет изменено в серии выпусков 4.3.x. Тестовый набор findutils выполняет все тесты для find на каждом уровне оптимизации и гарантирует, что результат будет одинаковым.
Изменение порядка выполнения операций, выполняемое оптимизатором, основанным на стоимости, может привести к изменениям в поведении, заметным для пользователя. Например, предикаты -readable и -empty чувствительны к изменению порядка. Если они выполняются в порядке -empty -readable, будет выдано сообщение об ошибке для недоступных каталогов. Если они выполняются в порядке -readable -empty, сообщение об ошибке не будет выдано. Именно поэтому изменение порядка выполнения операций не выполняется на уровне оптимизации по умолчанию.
ВЫРАЖЕНИЕ
Часть командной строки после списка начальных точек — это выражение. Это своего рода спецификация запроса, описывающая, как мы сопоставляем файлы и что делаем с сопоставленными файлами. Выражение состоит из последовательности элементов:
Тесты Тесты возвращают значение true или false, обычно на основе какого-либо свойства файла, который мы рассматриваем. Например, тест -empty истинен только в том случае, когда текущий файл пуст.
Действия Действия имеют побочные эффекты (например, выводят что-то в стандартный вывод) и возвращают либо true, либо false, обычно в зависимости от того, были ли они успешными. Например, действие -print выводит имя текущего файла в стандартный вывод.
Глобальные опции Глобальные опции влияют на работу тестов и действий, указанных в любой части командной строки. Глобальные опции всегда возвращают true. Например, опция -depth заставляет find выполнять обход файловой системы в порядке, начиная с самой глубокой точки.
Позиционные опции Позиционные опции влияют только на тесты или действия, которые следуют за ними. Позиционные опции всегда возвращают true. Например, опция -regextype является позиционной, определяя диалект регулярных выражений для регулярных выражений, встречающихся далее в командной строке.
Операторы Операторы объединяют другие элементы в выражении. Например, -o (означает логическое ИЛИ) и -a (означает логическое И). Если оператор отсутствует, предполагается -a.
Действие -print выполняется для всех файлов, для которых все выражение истинно, если только оно не содержит действия, отличного от -prune или -quit. Действия, которые подавляют действие -print по умолчанию, включают -delete, -exec, -execdir, -ok, -okdir, -fls, -fprint, -fprintf, -ls, -print и -printf.
Действие -delete также действует как опция (поскольку оно подразумевает -depth).
ПОЗИЦИОННЫЕ ОПЦИИ
Позиционные опции всегда возвращают true. Они влияют только на тесты, которые следуют за ними в командной строке.
-daystart
Измеряет время (для -amin, -atime, -cmin, -ctime, -mmin и -mtime) с начала сегодняшнего дня, а не с 24 часов назад. Эта опция влияет только на тесты, которые появляются позже в командной строке.
-follow
Устарело; вместо этого используйте опцию -L. Разыменовывает символические ссылки. Подразумевает -noleaf. Опция -follow влияет только на те тесты, которые появляются после нее в командной строке. Если опция -H или -L не указана, положение опции -follow изменяет поведение предиката -newer; любые файлы, перечисленные в качестве аргумента -newer, будут разыменованы, если они являются символическими ссылками. То же самое применимо к -newerXY, -anewer и -cnewer. Аналогично, предикат -type всегда будет соответствовать типу файла, на который указывает символическая ссылка, а не самой ссылке. Использование -follow приводит к тому, что предикаты -lname и -ilname всегда возвращают false.
-regextype type
Изменяет синтаксис регулярных выражений, используемый в тестах -regex и -iregex, которые следуют за ним в командной строке. Чтобы увидеть, какие типы регулярных выражений известны, используйте -regextype help. Документация Texinfo (см. РАЗДЕЛЫ) объясняет значение и различия между различными типами регулярных выражений. Если вы не используете эту опцию, find ведет себя так, как будто был указан тип регулярных выражений emacs.
-warn, -nowarn
Включает или выключает сообщения о предупреждениях. Эти предупреждения применяются только к использованию командной строки, а не к каким-либо условиям, с которыми find может столкнуться при поиске в каталогах. По умолчанию поведение соответствует -warn, если стандартный ввод является tty, и -nowarn в противном случае. Если генерируется сообщение о предупреждении, касающееся использования командной строки, статус выхода find не изменяется. Если переменная среды POSIXLY_CORRECT установлена, и также используется -warn, не указано, какие, если таковые имеются, предупреждения будут активны.
ГЛОБАЛЬНЫЕ ОПЦИИ
Глобальные опции всегда возвращают true. Глобальные опции действуют даже для тестов, которые появляются раньше в командной строке. Чтобы избежать путаницы, глобальные опции следует указывать в командной строке после списка начальных точек, непосредственно перед первым тестом, позиционной опцией или действием. Если вы укажете глобальную опцию в другом месте, find выдаст предупреждающее сообщение, объясняющее, что это может вызвать путаницу.
Глобальные опции указываются после списка начальных точек, поэтому они не являются тем же типом опций, что и, например, -L.
`-d` Синоним для `-depth`, для совместимости с FreeBSD, NetBSD, MacOS X и OpenBSD.
`-depth` Обрабатывать содержимое каждой директории перед самой директорией. Действие `-delete` также подразумевает `-depth`.
`-files0-from file`
Читать начальные точки из файла вместо того, чтобы получать их из командной строки. В отличие от известных ограничений передачи начальных точек через аргументы командной строки, а именно ограничения на количество имен файлов и присущей неоднозначности, когда имена файлов совпадают с именами опций, использование этой опции позволяет безопасно передавать произвольное количество начальных точек для поиска.
Использование этой опции и передача начальных точек в командной строке исключают друг друга и, следовательно, не допускаются одновременно.
Аргумент файла является обязательным. Можно использовать `-files0-from -` для чтения списка начальных точек из стандартного потока ввода, например, из конвейера. В этом случае действия `-ok` и `-okdir` не допускаются, поскольку они очевидно будут мешать чтению из стандартного ввода для получения подтверждения пользователя.
Начальные точки в файле должны быть разделены символами ASCII NUL. Два последовательных символа NUL, то есть начальная точка с нулевой длиной имени файла, не допускаются и приведут к сообщению об ошибке, за которым последует ненулевой код выхода.
Если указанный файл пуст, find не обрабатывает ни одну начальную точку и, следовательно, завершает работу сразу после разбора аргументов программы. Это отличается от стандартного вызова, когда find предполагает, что текущий каталог является начальной точкой, если путь не указан в качестве аргумента.
Обработка начальных точек в остальном происходит как обычно, например, find рекурсивно переходит в подкаталоги, если это не предотвращено иным образом. Чтобы обрабатывать только начальные точки, можно дополнительно передать `-maxdepth 0`.
Дополнительные примечания: если файл указан в файле ввода более одного раза, не определено, будет ли он посещен более одного раза. Если файл изменяется во время работы find, результат также не определен. Наконец, положение указателя в указанном файле на момент завершения работы find, будь то с помощью `-quit` или каким-либо другим способом, также не определено. Под "не определено" здесь подразумевается, что это может или не может работать или делать что-то конкретное, и что поведение может меняться от платформы к платформе или от версии findutils к версии.
`-help`, `--help`
Вывести сводку об использовании командной строки find и завершить работу.
`-ignore_readdir_race`
Обычно, если find не удается получить статистику файла, он выводит сообщение об ошибке. Если вы предоставите эту опцию, и файл будет удален между моментом, когда find считывает имя файла из каталога, и моментом, когда он пытается получить статистику файла, сообщение об ошибке не будет выдано. Это также относится к файлам или каталогам, имена которых указаны в командной строке. Эта опция начинает действовать во время чтения командной строки, что означает, что вы не можете выполнить поиск в одной части файловой системы с этой опцией, а в другой - без нее (если вам нужно это сделать, вам нужно выполнить две команды find, одну с опцией, а другую без нее).
Кроме того, команда find с опцией -ignore_readdir_race будет игнорировать ошибки действия -delete в случае, если файл исчез после того, как родительский каталог был прочитан: она не будет выводить сообщение об ошибке, и код возврата действия -delete будет истинным.
^ maxdepth levels
Спускаться не более levels (неотрицательное целое число) уровней вложенных каталогов от начальных точек. Использование -maxdepth 0 означает, что тесты и действия применяются только к самим начальным точкам.
^ mindepth levels
Не применять никакие тесты или действия на уровнях меньше levels (неотрицательное целое число). Использование -mindepth 1 означает обработку всех файлов, кроме начальных точек.
^ mount Не спускаться в каталоги, расположенные на других файловых системах. Альтернативное название для -xdev, для совместимости с некоторыми другими версиями find.
^ noignore_readdir_race
Отключает эффект опции -ignore_readdir_race.
^ noleaf
Не оптимизировать, предполагая, что каталоги содержат на 2 подкаталога меньше, чем их количество жестких ссылок. Эта опция необходима при поиске в файловых системах, которые не следуют соглашению Unix о связях каталогов, таких как CD-ROM или MS-DOS файловые системы или точки монтирования AFS. Каждый каталог в обычной файловой системе Unix имеет как минимум 2 жесткие ссылки: его имя и запись . в нем. Кроме того, его подкаталоги (если они есть) имеют запись .., связанную с этим каталогом. Когда find просматривает каталог, после того, как он выполнил stat для на 2 меньшего числа подкаталогов, чем количество ссылок в каталоге, он знает, что остальные записи в каталоге не являются каталогами (файлы «на листе» в дереве каталогов). Если необходимо только проверить имена файлов, нет необходимости выполнять для них stat; это дает значительное увеличение скорости поиска.
^ version, --version
Вывести номер версии find и завершить работу.
^ xdev Не спускаться в каталоги, расположенные на других файловых системах.
ТЕСТЫ
Некоторые тесты, например -newerXY и -samefile, позволяют сравнивать файл, который в данный момент просматривается, с некоторым файлом-образцом, указанным в командной строке. Когда используются эти тесты, интерпретация файла-образца определяется опциями -H, -L и -P, а также любыми предыдущими опциями -follow, но файл-образец проверяется только один раз, во время разбора командной строки. Если файл-образец не удается проверить (например, если системный вызов [stat]({filename}../../stat)(2) завершается неудачей), выводится сообщение об ошибке, и find завершается с ненулевым статусом.
Числовому аргументу n можно задать значение для тестов (например, -amin, -mtime, -gid, -inum, -links, -size, -uid и -used) следующим образом:
+n для значений больше n,
-n для значений меньше n,
n для точного соответствия значению n.
Поддерживаемые тесты:
-amin n
Файл был последний раз доступен менее чем, более чем или ровно n минут назад.
-anewer reference
Время последнего доступа к текущему файлу новее времени последнего изменения данных в файле-ссылке. Если reference является символической ссылкой и включена опция -H или -L, то всегда используется время последнего изменения данных файла, на который указывает ссылка.
-atime n
Файл был последний раз доступен менее чем, более чем или ровно n\*24 часа назад. Когда find определяет, сколько 24-часовых периодов прошло с последнего доступа к файлу, любая дробная часть игнорируется, поэтому для соответствия -atime +1 файл должен был быть доступен не менее двух дней назад.
-cmin n
Статус файла был последний раз изменен менее чем, более чем или ровно n минут назад.
-cnewer reference
Время последнего изменения статуса текущего файла новее времени последнего изменения данных в файле-ссылке. Если reference является символической ссылкой и включена опция -H или -L, то всегда используется время последнего изменения данных файла, на который указывает ссылка.
-ctime n
Статус файла был последний раз изменен менее чем, более чем или ровно n\*24 часа назад. См. комментарии к -atime, чтобы понять, как округление влияет на интерпретацию времени изменения статуса файла.
-empty Файл пуст и является либо обычным файлом, либо каталогом.
-executable
Соответствует файлам, которые являются исполняемыми, и каталогам, которые доступны для поиска (в смысле разрешения имен файлов) текущим пользователем. Это учитывает списки контроля доступа и другие артефакты разрешений, которые тест -perm игнорирует. Этот тест использует системный вызов access(2), и поэтому может быть обманут NFS-серверами, которые выполняют сопоставление UID (или подавление прав root), поскольку многие системы реализуют access(2) в ядре клиента и, следовательно, не могут использовать информацию о сопоставлении UID, хранящуюся на сервере. Поскольку этот тест основан только на результате системного вызова access(2), нет гарантии, что файл, для которого этот тест успешен, может быть фактически выполнен.
-false Всегда ложь.
-fstype type
Файл находится на файловой системе типа type. Допустимые типы файловых систем различаются в разных версиях Unix; неполный список типов файловых систем, которые принимаются в какой-либо версии Unix, следующий: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Вы можете использовать -printf с директивой %F, чтобы увидеть типы ваших файловых систем.
-gid n
Числовой идентификатор группы файла меньше, больше или точно равен n.
-group gname
Файл принадлежит группе gname (допустим числовой идентификатор группы).
-ilname pattern
Как -lname, но сопоставление не учитывает регистр. Если включена опция -L или -follow, этот тест возвращает false, если символическая ссылка не является недействительной.
-iname шаблон
Как -name, но сравнение не учитывает регистр. Например, шаблоны `fo*` и `F??`
совпадают с именами файлов `Foo`, `FOO`, `foo`, `fOo` и т. д. Шаблон `*foo*` также будет соответствовать
файлу с именем `.foobar`.
-inum n
Файл имеет номер inode меньше, больше или точно n. Обычно проще
использовать тест -samefile.
-ipath шаблон
Как -path, но сравнение не учитывает регистр.
-iregex шаблон
Как -regex, но сравнение не учитывает регистр.
-iwholename шаблон
См. -ipath. Этот альтернативный вариант менее переносим, чем -ipath.
-links n
Файл имеет меньше, больше или точно n жестких ссылок.
-lname шаблон
Файл является символической ссылкой, содержимое которой соответствует шаблону оболочки.
Метасимволы не рассматривают символы `\` или `.` как специальные. Если включена опция -L или -follow,
то этот тест возвращает false, если символическая ссылка повреждена.
-mmin n
Данные файла были в последний раз изменены менее чем, более чем или ровно n минут назад.
-mtime n
Данные файла были в последний раз изменены менее чем, более чем или ровно n * 24 часов назад.
См. комментарии к -atime, чтобы понять, как округление влияет на интерпретацию времени изменения файла.
-name шаблон
Базовая часть имени файла (путь, из которого удалены начальные каталоги) соответствует шаблону оболочки.
Поскольку начальные каталоги имен файлов удаляются, шаблон не должен содержать слеш, потому что `-name a/b` никогда не будет соответствовать чему-либо (и, вероятно, следует использовать -path). Исключением является использование только слеша в качестве шаблона (`-name /`), поскольку это допустимая строка для сопоставления корневого каталога `/` (потому что базовая часть имени `/` — `/`). Если вы попытаетесь передать шаблон, содержащий один или несколько слешей, но не состоящий только из одного слеша, выдается предупреждение, если не установлена переменная среды POSIXLY_CORRECT или не используется опция -nowarn.
Чтобы игнорировать каталог и файлы в нем, используйте -prune, а не проверяйте каждый файл в дереве; см. пример в описании этого действия. Фигурные скобки не распознаются как специальные, несмотря на то, что некоторые оболочки, включая Bash, наделяют фигурные скобки специальным значением в шаблонах оболочки. Сопоставление имен файлов выполняется с использованием функции библиотеки fnmatch(3). Не забудьте заключить шаблон в кавычки, чтобы защитить его от развертывания оболочкой.
-newer ссылка
Время последнего изменения данных текущего файла новее, чем время последнего изменения данных файла-ссылки. Если ссылка является символической ссылкой и включена опция -H или -L, то всегда используется время последнего изменения данных файла, на который она указывает.
-newerXY ссылка
Возвращает true, если временная метка X рассматриваемого файла новее, чем временная метка Y файла-ссылки. Буквы X и Y могут быть любыми из следующих букв:
a Время последнего доступа к файлу.
B Время создания файла.
c Время последнего изменения статуса inode файла.
m Время последнего изменения содержимого файла.
t Ссылка интерпретируется непосредственно как время.
Некоторые комбинации недопустимы; например, недопустимо, чтобы X был равен t. Некоторые комбинации не реализованы во всех системах; например, B не поддерживается во всех системах. Если указана недопустимая или неподдерживаемая комбинация XY, возникает фатальная ошибка. Временные значения интерпретируются так же, как аргумент для опции -d команды GNU date. Если вы попытаетесь использовать время создания файла, и его нельзя определить, возникнет сообщение об ошибке. Если вы указываете тест, который ссылается на время создания файлов, этот тест не удастся для любых файлов, для которых время создания неизвестно.
-nogroup
Не существует группы, соответствующей числовому идентификатору группы файла.
-nouser
Не существует пользователя, соответствующего числовому идентификатору пользователя файла.
-path pattern
Имя файла соответствует шаблону оболочки pattern. Метасимволы не обрабатывают /' или.' особым образом; поэтому, например,
find . -path "./sr*sc"
выведет запись для каталога с именем ./src/misc (если он существует). Чтобы игнорировать целое дерево каталогов, используйте -prune, а не проверяйте каждый файл в дереве. Обратите внимание, что тест соответствия по шаблону применяется ко всему имени файла, начиная с одной из начальных точек, указанных в командной строке. Использовать абсолютный путь имеет смысл только в том случае, если соответствующая начальная точка также является абсолютным путем. Это означает, что следующая команда никогда не будет соответствовать чему-либо:
find bar -path /foo/bar/myfile -print
Команда find сравнивает аргумент -path с конкатенацией имени каталога и базового имени файла, который она проверяет. Поскольку конкатенация никогда не будет заканчиваться слешем, аргументы -path, заканчивающиеся слешем, не будут соответствовать чему-либо (за исключением, возможно, начальной точки, указанной в командной строке). Предикат -path также поддерживается командой find HP-UX и является частью стандарта POSIX 2008.
-perm mode
Битовые разрешения файла точно соответствуют mode (в восьмеричном или символьном формате). Поскольку требуется точное соответствие, если вы хотите использовать этот формат для символьных режимов, вам, возможно, придется указать довольно сложную строку режима. Например, -perm g=w будет соответствовать только файлам, у которых режим 0020 (то есть, для которых установлено только разрешение на запись для группы). Скорее всего, вы захотите использовать формы / или -, например, -perm -g=w, которые соответствуют любому файлу с разрешением на запись для группы. См. раздел ПРИМЕРЫ для некоторых иллюстративных примеров.
-perm -mode
Все биты разрешений mode установлены для файла. В этой форме принимаются символьные режимы, и обычно именно так вы хотите их использовать. Вы должны указать u, g или o, если вы используете символьный режим. См. раздел ПРИМЕРЫ для некоторых иллюстративных примеров.
-perm /mode
Любые из битов разрешений mode установлены для файла. В этой форме принимаются символьные режимы. Вы должны указать u, g или o, если вы используете символьный режим. См. раздел ПРИМЕРЫ для некоторых иллюстративных примеров. Если ни один из битов разрешений в mode не установлен, этот тест соответствует любому файлу (идея здесь заключается в том, чтобы соответствовать поведению -perm -000).
-perm +mode
Это больше не поддерживается (и устарело с 2005 года). Вместо этого используйте -perm /mode.
-readable
Находит файлы, которые доступны для чтения текущим пользователем. Это учитывает списки контроля доступа и другие объекты разрешений, которые тест -perm не учитывает. Этот тест использует системный вызов access(2), и поэтому его можно обмануть с помощью NFS-серверов, использующих сопоставление UID (или сжатие root), поскольку многие системы реализуют access(2) в ядре клиента и, следовательно, не могут использовать информацию о сопоставлении UID, хранящуюся на сервере.
-regex pattern
Имя файла соответствует регулярному выражению pattern. Это соответствие для всего пути, а не поиск. Например, чтобы найти файл с именем ./fubar3, можно использовать регулярное выражение .*bar. или .*b.*3, но не f.*r3. Регулярные выражения, используемые в find, по умолчанию являются регулярными выражениями Emacs, но их можно изменить с помощью опции -regextype.
-samefile name
Файл ссылается на тот же inode, что и name. Когда используется -L, это может включать символические ссылки.
-size n[cwbkMG]
Файл использует меньше, больше или ровно n единиц пространства, округляя в большую сторону. Можно использовать следующие суффиксы:
`b' для 512-байтных блоков (это значение по умолчанию, если суффикс не указан)
`c' для байтов
`w' для двухбайтных слов
`k' для килобайт (КиБ, единицы 1024 байта)
`M' для мегабайт (МиБ, единицы 1024 * 1024 = 1048576 байт)
`G' для гигабайт (ГиБ, единицы 1024 * 1024 * 1024 = 1073741824 байта)
Размер — это просто член st_size структуры stat, заполненной системным вызовом lstat (или stat), округленный, как указано выше. Другими словами, это соответствует результату, который вы получаете от ls -l. Имейте в виду, что спецификаторы формата %k' и%b' опции -printf обрабатывают разреженные файлы по-разному. Суффикс `b' всегда обозначает 512-байтные блоки и никогда не 1024-байтные, что отличается от поведения -ls.
Префиксы + и - обозначают больше и меньше, как обычно, т. е. точный размер n не соответствует. Имейте в виду, что размер округляется до следующей единицы. Следовательно, -size -1M не эквивалентен -size -1048576c. Первый соответствует только пустым файлам, а второй — файлам от 0 до 1 048 575 байт.
-true Всегда истинно.
-type c
Файл имеет тип c:
b блок (буферизованное) специальное устройство
c символьное (небуферизованное) специальное устройство
d каталог
p именованный канал (FIFO)
f обычный файл
l символическая ссылка; это никогда не истинно, если используется опция -L или опция -follow, если только символическая ссылка не является недействительной. Если вы хотите искать символические ссылки при использовании -L, используйте -xtype.
s socket
D door (Solaris)
Чтобы выполнить поиск по нескольким типам одновременно, можно указать объединенный список букв типов, разделенных запятой , (расширение GNU).
-uid n Числовой идентификатор пользователя файла меньше, больше или точно равен n.
-used n
Файл был в последний раз доступен менее чем, более чем или ровно n дней после того, как его статус был в последний раз изменен.
-user uname
Файл принадлежит пользователю uname (допускается числовой идентификатор пользователя).
-wholename pattern
См. -path. Эта альтернатива менее переносима, чем -path.
-writable
Соответствует файлам, которые доступны для записи текущим пользователем. Это учитывает списки управления доступом и другие разрешения, которые тест -perm игнорирует. Этот тест использует системный вызов access(2), и поэтому может быть обманут NFS-серверами, которые выполняют сопоставление идентификаторов пользователей (или подавление прав root), поскольку многие системы реализуют access(2) в ядре клиента и, следовательно, не могут использовать информацию о сопоставлении идентификаторов пользователей, хранящуюся на сервере.
-xtype c
То же, что и -type, если файл не является символической ссылкой. Для символических ссылок: если была указана опция -H или -P, то истинно, если файл является ссылкой на файл типа c; если указана опция -L, то истинно, если c равно l. Другими словами, для символических ссылок -xtype проверяет тип файла, на который указывает ссылка, в то время как -type этого не делает. Если символическая ссылка нарушена (потому что объект, на который она указывает, не существует или ссылка указывает на себя), то -xtype будет вести себя так же, как и -type.
-context pattern
(Только для SELinux) Контекст безопасности файла соответствует шаблону glob.
ДЕЙСТВИЯ
-delete
Удалить файлы или каталоги; истинно, если удаление выполнено успешно. Если удаление не удалось, выдается сообщение об ошибке, и код выхода find будет ненулевым (когда он в конечном итоге завершится).
Предупреждение: не забывайте, что find вычисляет командную строку как выражение, поэтому, если поместить -delete первым, find попытается удалить все, что находится ниже указанных вами начальных точек.
Использование действия -delete в командной строке автоматически включает опцию -depth. В свою очередь, -depth делает -prune неэффективной, поэтому действие -delete не может быть полезно объединено с -prune.
Часто пользователь может захотеть протестировать командную строку find с помощью -print, прежде чем добавить -delete для фактического удаления. Чтобы избежать неожиданных результатов, обычно лучше помнить об использовании -depth явно во время этих предварительных тестовых запусков.
Действие -delete не сможет удалить каталог, если он не пуст.
Вместе с опцией -ignore_readdir_race find будет игнорировать ошибки действия -delete в том случае, если файл исчез после того, как родительский каталог был прочитан: он не будет выдавать диагностическое сообщение об ошибке, не изменит код выхода на ненулевой, и код возврата действия -delete будет истинным.
-exec command ;
Выполнить команду; истинно, если возвращен статус 0. Все последующие аргументы для find рассматриваются как аргументы для команды, пока не будет обнаружен аргумент, состоящий из ;. Строка {} заменяется текущим именем файла, который обрабатывается, везде, где она встречается в аргументах команды, а не только в аргументах, где она находится одна, как в некоторых версиях find. Оба этих выражения могут потребовать экранирования (с помощью \) или заключения в кавычки, чтобы защитить их от расширения оболочкой. См. раздел ПРИМЕРЫ для примеров использования опции -exec. Указанная команда выполняется один раз для каждого найденного файла. Команда выполняется в начальном каталоге. Существуют неизбежные проблемы безопасности, связанные с использованием действия -exec; вместо этого следует использовать опцию -execdir.
-exec command {} +
Эта разновидность действия -exec выполняет указанную команду над выбранными файлами, но
командная строка строится путем добавления имени каждого выбранного файла в конец; общее
количество вызовов команды будет намного меньше, чем количество найденных файлов. Командная строка строится примерно так же, как и в xargs. В команде допускается только один экземпляр {} и он должен располагаться в конце, непосредственно
перед +; его необходимо экранировать (с помощью \) или заключать в кавычки, чтобы защитить от интерпретации оболочкой. Команда выполняется в исходном каталоге. Если какое-либо из
вызовов с формой + возвращает ненулевое значение в качестве кода выхода, то find возвращает ненулевое значение. Если find сталкивается с ошибкой, это иногда может привести к немедленному
завершению работы, поэтому некоторые ожидающие команды могут не быть выполнены вообще. По этой причине -exec my-command ... {} + -quit может не привести к фактическому выполнению my-command. Эта разновидность -exec всегда возвращает true.
-execdir command ;
-execdir command {} +
Аналогично -exec, но указанная команда выполняется из подкаталога, содержащего найденный
файл, что обычно отличается от каталога, в котором вы запустили find. Как и в случае -exec,
{} следует заключать в кавычки, если find вызывается из оболочки. Это гораздо более безопасный способ вызова команд, поскольку он позволяет избежать состояний гонки при разрешении путей к
найденным файлам. Как и в случае действия -exec, форма -execdir с + будет строить командную строку для обработки более одного найденного файла, но в любом данном вызове команды будут перечислены только файлы, существующие в одном и том же подкаталоге. Если вы используете эту опцию, вы должны убедиться, что ваша переменная среды PATH не содержит .'; иначе злоумышленник может выполнить любые команды, просто оставив файл с соответствующим именем в каталоге, в котором вы будете выполнять-execdir. То же самое относится и к наличию вPATHпустых записей или записей, которые не являются абсолютными именами каталогов. Если какой-либо вызов с формой+возвращает ненулевое значение, тоfindвозвращает ненулевое значение. Еслиfindсталкивается с ошибкой, это иногда может привести к немедленному завершению работы, поэтому некоторые ожидающие команды могут не быть выполнены вообще. Результат действия зависит от того, используется ли форма с+или форма с;:-execdir command {} +всегда возвращает true, а-execdir command {} ;возвращает true только в том случае, еслиcommand` возвращает 0.
-fls file
Истина; аналогично -ls, но записывает в файл, как -fprint. Выходной файл всегда создается, даже если условие никогда не выполняется. См. раздел «НЕОБЫЧНЫЕ ИМЕНА ФАЙЛОВ» для получения информации о том, как обрабатываются необычные символы в именах файлов.
-fprint file
Истина; выводит полное имя файла в файл file. Если файл не существует при запуске find, он создается; если он существует, он обрезается. Файлы /dev/stdout и /dev/stderr обрабатываются особым образом; они ссылаются на стандартный вывод и стандартный поток ошибок, соответственно. Выходной файл всегда создается, даже если условие никогда не выполняется. См. раздел «НЕОБЫЧНЫЕ ИМЕНА ФАЙЛОВ» для получения информации о том, как обрабатываются необычные символы в именах файлов.
-fprint0 file
Истина; аналогично -print0, но записывает в файл, как -fprint. Выходной файл всегда создается, даже если условие никогда не выполняется. См. раздел «НЕОБЫЧНЫЕ ИМЕНА ФАЙЛОВ» для получения информации о том, как обрабатываются необычные символы в именах файлов.
-fprintf file format
Истина; аналогично -printf, но записывает в файл, как -fprint. Выходной файл всегда создается, даже если условие никогда не выполняется. См. раздел «НЕОБЫЧНЫЕ ИМЕНА ФАЙЛОВ» для получения информации о том, как обрабатываются необычные символы в именах файлов.
-ls Истина; выводит информацию о текущем файле в формате ls -dils в стандартный вывод. Количество блоков в килобайтах, если не установлена переменная окружения POSIXLY_CORRECT, в противном случае используются блоки размером 512 байта. См. раздел «НЕОБЫЧНЫЕ ИМЕНА ФАЙЛОВ» для получения информации о том, как обрабатываются необычные символы в именах файлов.
-ok command ;
Аналогично -exec, но сначала запрашивает подтверждение у пользователя. Если пользователь согласен, выполняется команда. В противном случае просто возвращается false. Если команда выполняется, ее стандартный ввод перенаправляется из /dev/null. Это действие нельзя указывать вместе с опцией -files0-from.
Ответ на запрос сопоставляется с парой регулярных выражений, чтобы определить, является ли он утвердительным или отрицательным. Это регулярное выражение получается из системы, если установлена переменная окружения POSIXLY_CORRECT, в противном случае из переводов сообщений find. Если в системе нет подходящего определения, будет использоваться собственное определение find. В любом случае на интерпретацию самого регулярного выражения будут влиять переменные окружения LC_CTYPE (классы символов) и LC_COLLATE (диапазоны и классы эквивалентности символов).
-okdir command ;
Аналогично -execdir, но сначала запрашивает подтверждение у пользователя так же, как и для -ok. Если пользователь не согласен, просто возвращается false. Если команда выполняется, ее стандартный ввод перенаправляется из /dev/null. Это действие нельзя указывать вместе с опцией -files0-from.
-print Истина; выводит полное имя файла в стандартный вывод, за которым следует символ новой строки. Если вы передаете вывод find в другую программу и существует малейшая вероятность того, что файлы, которые вы ищете, могут содержать символ новой строки, тогда вам следует серьезно рассмотреть возможность использования опции -print0 вместо -print. См. раздел «НЕОБЫЧНЫЕ ИМЕНА ФАЙЛОВ» для получения информации о том, как обрабатываются необычные символы в именах файлов.
-print0
Истина; выводит полное имя файла в стандартный вывод, за которым следует нулевой символ (вместо символа новой строки, который использует -print). Это позволяет программам, обрабатывающим вывод find, правильно интерпретировать имена файлов, содержащие новые строки или другие типы пробелов. Этот параметр соответствует параметру -0 команды xargs.
-printf format
Истина; выводит формат в стандартный вывод, интерпретируя управляющие последовательности \' и директивы\'%. Ширину и точность полей можно указать, как в функции printf(3) языка C. Обратите внимание, что многие поля выводятся как %s, а не %d, и это может означать, что флаги могут работать не так, как вы ожидаете. Это также означает, что флаг - работает (он принудительно выравнивает поля по левому краю). В отличие от -print, -printf не добавляет символ новой строки в конце строки. Управляющие последовательности и директивы:
\a Звуковой сигнал.
\b Возврат на одну позицию.
\c Прекратить вывод из этого формата и немедленно очистить вывод.
\f Перевод страницы.
\n Новая строка.
\r Возврат каретки.
\t Горизонтальная табуляция.
\v Вертикальная табуляция.
\0 ASCII NUL.
\\ Литеральный обратный слеш (`\`).
\NNN Символ, чей ASCII-код равен NNN (в восьмеричной системе).
Символ `\' за которым следует любой другой символ, рассматривается как обычный символ, поэтому оба символа выводятся.
%% Литеральный знак процента.
%a Время последнего доступа к файлу в формате, возвращаемом функцией ctime(3) языка C.
%Ak Время последнего доступа к файлу в формате, указанном параметром k, который может быть `@` или директивой для функции strftime(3) языка C. В следующем представлен неполный список возможных значений для k. Обратитесь к документации strftime(3) для получения полного списка. Некоторые символы спецификации формата могут быть недоступны в некоторых системах из-за различий в реализации функции библиотеки strftime(3).
@ Количество секунд, прошедших с 1 января 1970 года, 00:00 по Гринвичу, с дробной частью.
Поля времени:
H час (00..23)
I час (01..12)
k час (0..23)
l час (1..12)
M минута (00..59)
p AM или PM в локали
r время, 12-часовой формат (hh:mm:ss [AP]M)
S секунда (00.00 .. 61.00). Есть дробная часть.
T время, 24-часовой формат (hh:mm:ss.xxxxxxxxxx)
+ Дата и время, разделенные символом `+`, например, `2004-04-28+22:22:05.0`. Это расширение GNU. Время указывается в текущем часовом поясе (на который может влиять настройка переменной среды TZ). Поле секунд включает дробную часть.
X время в локальном формате (H:M:S). Поле секунд включает дробную часть.
Z часовой пояс (например, EDT), или ничего, если часовой пояс не может быть определен.
Поля даты:
a сокращенное название дня недели в локали (Вс..Сб)
A полное название дня недели в локали, переменная длина (Воскресенье..Суббота)
b сокращенное название месяца в локали (Янв..Дек)
B полное название месяца в локали, переменная длина (Январь..Декабрь)
c дата и время в локали (Сб Ноя 04 12:02:33 EST 1989). Формат
такой же, как у ctime(3), поэтому для обеспечения совместимости с этим форматом в поле секунд нет дробной части.
d день месяца (01..31)
D дата (мм/дд/гг)
F дата (гггг-мм-дд)
h то же, что и b
j день года (001..366)
m месяц (01..12)
U номер недели в году, воскресенье — первый день недели (00..53)
w день недели (0..6)
W номер недели в году, понедельник — первый день недели (00..53)
x формат даты в локали (мм/дд/гг)
y последние две цифры года (00..99)
Y год (1970...)
%b объем дискового пространства, используемого для этого файла, в блоках по 512 байт. Поскольку дисковое пространство выделяется кратно размеру блока файловой системы, это значение обычно больше, чем %s/512, но оно также может быть меньше, если файл является разреженным файлом.
%Bk время создания файла, т. е. время его создания, в формате, указанном в k, который совпадает с форматом для %A. Эта директива выдает пустую строку, если основная операционная система или файловая система не поддерживают время создания.
%c время последнего изменения статуса файла в формате, возвращаемом функцией C ctime(3).
%Ck время последнего изменения статуса файла в формате, указанном в k, который совпадает с форматом для %A.
%d глубина файла в дереве каталогов; 0 означает, что файл является начальной точкой.
%D номер устройства, на котором находится файл (поле st_dev структуры stat), в десятичном виде.
%f выводит базовое имя; имя файла, из которого удалены все ведущие каталоги (только последний элемент). Для /, результат — '/'. См. раздел ПРИМЕРЫ для примера.
%F тип файловой системы, на которой находится файл; это значение можно использовать для -fstype.
%g имя группы файла или числовой идентификатор группы, если у группы нет имени.
%G числовой идентификатор группы файла.
%h имя каталога; ведущие каталоги имени файла (все, кроме последнего элемента). Если имя файла не содержит косых черт (поскольку оно находится в текущем каталоге), спецификатор %h расширяется до '.'. Для файлов, которые сами являются каталогами и содержат косую черту (включая /), %h расширяется до пустой строки. См. раздел ПРИМЕРЫ для примера.
%H начальная точка, под которой был найден файл.
%i номер inode файла (в десятичном виде).
%k объем дискового пространства, используемого для этого файла, в блоках по 1 КБ. Поскольку дисковое пространство выделяется кратно размеру блока файловой системы, это значение обычно больше, чем %s/1024, но оно также может быть меньше, если файл является разреженным файлом.
%l объект символической ссылки (пустая строка, если файл не является символической ссылкой).
%m биты разрешений файла (в восьмеричном виде). Этот параметр использует «традиционные» числа, которые используют большинство Unix-реализаций, но если ваша конкретная реализация использует необычный порядок восьмеричных битов разрешений, вы увидите разницу между фактическим значением режима файла и выводом %m. Обычно вам нужно, чтобы в начале этого числа был ноль, и для этого вам следует использовать флаг # (например, `%#m`).
%M Разрешения файла (в символьной форме, как для команды `ls`). Эта директива поддерживается в findutils версии 4.2.5 и более поздних.
%n Количество жестких ссылок на файл.
%p Имя файла.
%P Имя файла с удаленной информацией о начальной точке, из которой он был найден.
%s Размер файла в байтах.
%S Степень разреженности файла. Вычисляется как (BLOCKSIZE * st_blocks / st_size). Точное значение, которое вы получите для обычного файла определенной длины, зависит от системы. Однако, как правило, для разреженных файлов значения будут меньше 1.0, а для файлов, использующих косвенные блоки, значение может быть больше 1.0. В общем, количество блоков, используемых файлом, зависит от файловой системы. Значение, используемое для BLOCKSIZE, зависит от системы, но обычно составляет 512 байт. Если размер файла равен нулю, напечатанное значение не определено. В системах, не поддерживающих st_blocks, степень разреженности файла предполагается равной 1.0.
%t Время последнего изменения файла в формате, возвращаемом функцией `ctime(3)` в языке C.
%Tk Время последнего изменения файла в формате, указанном в `k`, который аналогичен формату для `%A`.
%u Имя пользователя файла или числовой идентификатор пользователя, если у пользователя нет имени.
%U Числовой идентификатор пользователя файла.
%y Тип файла (как в `ls -l`), U=неизвестный тип (не должно происходить).
%Y Тип файла (как в `%y`), плюс следование по символическим ссылкам: `L`=цикл, `N`=не существует, `?` для любой другой ошибки при определении типа целевого объекта символической ссылки.
%Z (только для SELinux) контекст безопасности файла.
%{ %[ %(
Зарезервировано для будущего использования.
Символ `%`, за которым следует любой другой символ, игнорируется, но этот другой символ выводится (не полагайтесь на это, так как могут быть добавлены дополнительные символы формата). Символ `%` в конце аргумента формата приводит к неопределенному поведению, поскольку за ним не следует ни один символ. В некоторых локалях он может спрятать ключи от вашей двери, а в других — удалить последнюю страницу из романа, который вы читаете.
Директивы `%m` и `%d` поддерживают флаги `#`, `0` и `+`, но остальные директивы этого не делают, даже если они выводят числа. Числовые директивы, которые не поддерживают эти флаги, включают G, U, b, D, k и n. Флаг формата `-` поддерживается и изменяет выравнивание поля с выравнивания по правому краю (который является значением по умолчанию) на выравнивание по левому краю.
См. раздел «НЕОБЫЧНЫЕ ИМЕНА ФАЙЛОВ» для получения информации о том, как обрабатываются необычные символы в именах файлов.
-prune True; если файл является каталогом, не переходить в него. Если указан параметр `-depth`, то `-prune` не имеет эффекта. Поскольку `-delete` подразумевает `-depth`, вы не можете полезно использовать `-prune` и `-delete` вместе. Например, чтобы пропустить каталог `src/emacs` и все файлы и каталоги в нем и вывести имена остальных найденных файлов, сделайте следующее:
find . -path ./src/emacs -prune -o -print
-quit Немедленно завершить работу (с кодом возврата ноль, если не произошло ошибок). Это отличается от -prune, потому что -prune применяется только к содержимому отсеченных каталогов, а -quit просто заставляет find немедленно остановиться. Никакие дочерние процессы не будут оставлены работающими. Любые командные строки, созданные с помощью -exec ... + или -execdir ... +, будут выполнены до завершения программы. После выполнения -quit больше файлов, указанных в командной строке, не будут обрабатываться. Например, `find /tmp/foo /tmp/bar -print -quit` напечатает только `/tmp/foo`.
Одним из распространенных способов использования -quit является остановка поиска по файловой системе после того, как мы нашли то, что искали. Например, если мы хотим найти только один файл, мы можем сделать это так: find / -name needle -print -quit
ОПЕРАТОРЫ
Перечислены в порядке убывания приоритета:
( expr )
Принудительный приоритет. Поскольку скобки имеют специальное значение для оболочки, обычно вам потребуется их экранировать. Во многих примерах в этой странице руководства используются обратные слэши для этой цели: \(...\)' вместо(...)'.
! expr Истина, если expr ложно. Этот символ также обычно требует защиты от интерпретации оболочкой.
-not expr
То же, что и ! expr, но не соответствует стандарту POSIX.
expr1 expr2
Два выражения подряд рассматриваются как соединенные неявным -a; expr2 не вычисляется, если expr1 ложно.
expr1 -a expr2
То же, что и expr1 expr2.
expr1 -and expr2
То же, что и expr1 expr2, но не соответствует стандарту POSIX.
expr1 -o expr2
Или; expr2 не вычисляется, если expr1 истинно.
expr1 -or expr2
То же, что и expr1 -o expr2, но не соответствует стандарту POSIX.
expr1 , expr2
Список; оба выражения expr1 и expr2 всегда вычисляются. Значение expr1 отбрасывается; значение списка — значение expr2. Оператор запятой может быть полезен для поиска нескольких разных типов объектов, но при этом для обхода файловой системы используется только один проход. Действие -fprintf можно использовать для вывода различных найденных элементов в несколько различных выходных файлов.
Обратите внимание, что -a, когда он указан неявно (например, когда два теста появляются без явного оператора между ними) или явно, имеет более высокий приоритет, чем -o. Это означает, что find . -name afile -o -name bfile -print никогда не напечатает afile.
НЕОБЫЧНЫЕ ИМЕНА ФАЙЛОВ
Многие действия find приводят к печати данных, находящихся под контролем других пользователей. Это включает имена файлов, размеры, время изменения и так далее. Имена файлов могут быть проблемой, поскольку они могут содержать любые символы, кроме \0' и/'. Необычные символы в именах файлов могут неожиданно и часто нежелательным образом воздействовать на ваш терминал (например, изменять настройки функциональных клавиш на некоторых терминалах). Необычные символы обрабатываются по-разному различными действиями, как описано ниже.
-print0, -fprint0
Всегда выводить точное имя файла без изменений, даже если вывод предназначен для терминала.
-ls, -fls
Необычные символы всегда экранируются. Символы пробела, обратной косой черты и двойной кавычки печатаются с использованием C-подобного экранирования (например, \f',\"'). Другие необычные символы печатаются с использованием восьмеричного экранирования. Другие печатные символы (для -ls и -fls это символы в диапазоне от восьмеричного 041 до 0176) печатаются как есть.
-printf, -fprintf
Если вывод не предназначен для терминала, он выводится как есть. В противном случае результат зависит от используемой директивы. Директивы %D, %F, %g, %G, %H, %Y и %y расширяются до значений, которые не контролируются владельцами файлов, и поэтому они выводятся как есть. Директивы %a, %b, %c, %d, %i, %k, %m, %M, %n, %s, %t, %u и %U имеют значения, которые контролируются владельцами файлов, но которые не могут использоваться для отправки произвольных данных в терминал, и поэтому они выводятся как есть. Директивы %f, %h, %l, %p и %P заключаются в кавычки. Это заключение в кавычки выполняется таким же образом, как и для GNU ls. Это не тот же механизм заключения в кавычки, который используется для -ls и -fls. Если вы можете решить, какой формат использовать для вывода find, обычно лучше использовать `\0' в качестве терминатора, чем использовать новую строку, поскольку имена файлов могут содержать символы пробела и новой строки. Настройка переменной среды LC_CTYPE используется для определения того, какие символы необходимо заключать в кавычки.
-print, -fprint
Заключение в кавычки выполняется таким же образом, как и для -printf и -fprintf. Если вы используете find в скрипте или в ситуации, когда сопоставленные файлы могут иметь произвольные имена, вам следует рассмотреть возможность использования -print0 вместо -print.
Действия -ok и -okdir выводят текущее имя файла как есть. Это может измениться в будущей версии.
СООТВЕТСТВИЕ СТАНДАРТАМ
Для максимально точного соответствия стандарту POSIX необходимо установить переменную среды POSIXLY_CORRECT. Следующие опции указаны в стандарте POSIX (IEEE Std 1003.1-2008, 2016 Edition):
-H Эта опция поддерживается.
-L Эта опция поддерживается.
-name Эта опция поддерживается, но соответствие POSIX зависит от соответствия POSIX функции fnmatch(3) в вашей системе. Начиная с findutils-4.2.2, символы оболочки (`*', `?' или `[]', например) соответствуют ведущей точке (`.'), потому что IEEE PASC interpretation 126 требует этого. Это изменение по сравнению с предыдущими версиями findutils.
-type Поддерживается. POSIX определяет `b', `c', `d', `l', `p', `f' и `s'. GNU find также поддерживает `D', представляющий собой Door, когда операционная система предоставляет их. Кроме того, GNU find позволяет указать несколько типов одновременно в виде списка, разделенного запятыми.
-ok Поддерживается. Интерпретация ответа соответствует шаблонам `yes' и `no', выбранным путем установки переменной среды LC_MESSAGES. Когда переменная среды POSIXLY_CORRECT установлена, эти шаблоны берутся из определения положительного (да) или отрицательного (нет) ответа в вашей системе. См. документацию вашей системы для nl_langinfo(3), в частности, YESEXPR и NOEXPR. Когда POSIXLY_CORRECT не установлена, шаблоны вместо этого берутся из каталога сообщений find.
-newer Поддерживается. Если указанный файл является символической ссылкой, она всегда разрешается. Это изменение по сравнению с предыдущим поведением, когда время бралось из самой символической ссылки; см. раздел «ИСТОРИЯ» ниже.
-perm Поддерживается. Если переменная среды POSIXLY_CORRECT не задана, некоторые аргументы режима (например, +a+x), которые не являются допустимыми в POSIX, поддерживаются для обратной совместимости.
Другие основные параметры Параметры -atime, -ctime, -depth, -exec, -group, -links, -mtime, -nogroup, -nouser, -ok, -path, -print, -prune, -size, -user и -xdev поддерживаются.
Стандарт POSIX определяет круглые скобки (, ), отрицание ! и логические операторы AND/OR: -a и -o.
Все остальные параметры, предикаты, выражения и т. д. являются расширениями, выходящими за рамки стандарта POSIX. Многие из этих расширений не являются уникальными для GNU find.
Стандарт POSIX требует, чтобы find обнаруживал циклы:
Утилита find должна обнаруживать бесконечные циклы; то есть, вход в ранее посещенный каталог, который является предком последнего обработанного файла. При обнаружении бесконечного цикла find должна выводить диагностическое сообщение в стандартный поток ошибок и либо восстанавливать свою позицию в иерархии, либо завершать работу.
GNU find соответствует этим требованиям. Количество ссылок на каталоги, содержащие записи, которые являются жесткими ссылками на предка, часто будет меньше, чем должно быть. Это может означать, что GNU find иногда оптимизирует и пропускает посещение подкаталога, который фактически является ссылкой на предка. Поскольку find фактически не входит в такой подкаталог, ему разрешено не выводить диагностическое сообщение. Хотя такое поведение может быть несколько запутанным, маловероятно, что кто-то на самом деле полагается на него. Если оптимизация leaf отключена с помощью -noleaf, запись каталога всегда будет проверяться, и диагностическое сообщение будет выдаваться, когда это уместно. Символьные ссылки не могут использоваться для создания файловых циклов как таковых, но если используется параметр -L или -follow, диагностическое сообщение выдается, когда find обнаруживает цикл символьных ссылок. Как и в случае циклов, содержащих жесткие ссылки, оптимизация leaf часто означает, что find знает, что ему не нужно вызывать stat() или chdir() для символьной ссылки, поэтому эта диагностика часто не требуется.
Параметр -d поддерживается для совместимости с различными BSD-системами, но вам следует использовать стандартный для POSIX параметр -depth.
Переменная окружения POSIXLY_CORRECT не влияет на поведение тестов -regex или -iregex, поскольку эти тесты не определены в стандарте POSIX.
ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ
LANG Предоставляет значение по умолчанию для переменных интернационализации, которые не установлены или пусты.
LC_ALL Если установлена в непустую строку, она переопределяет значения всех остальных переменных интернационализации.
LC_COLLATE
Стандарт POSIX определяет, что эта переменная влияет на сопоставление с образцом, используемое для опции -name. GNU find использует библиотечную функцию fnmatch(3), и поэтому поддержка LC_COLLATE зависит от системной библиотеки. Эта переменная также влияет на интерпретацию ответа, возвращаемого опцией -ok; в то время как переменная LC_MESSAGES выбирает фактический шаблон, используемый для интерпретации ответа, возвращаемого опцией -ok, интерпретация любых выражений в скобках в этом шаблоне будет зависеть от LC_COLLATE.
LC_CTYPE
Эта переменная влияет на обработку классов символов, используемых в регулярных выражениях, а также с опцией -name, если системная библиотечная функция fnmatch(3) поддерживает это. Эта переменная также влияет на интерпретацию любых классов символов в регулярных выражениях, используемых для интерпретации ответа, возвращаемого запросом, выдаваемым опцией -ok. Переменная окружения LC_CTYPE также будет влиять на то, какие символы считаются непечатаемыми при выводе имен файлов; см. раздел НЕОБЫЧНЫЕ ИМЕНА ФАЙЛОВ.
LC_MESSAGES
Определяет локаль, которая будет использоваться для интернационализированных сообщений. Если переменная окружения POSIXLY_CORRECT установлена, она также определяет интерпретацию ответа, возвращаемого запросом, выдаваемым опцией -ok.
NLSPATH
Определяет расположение каталогов сообщений интернационализации.
PATH Влияет на каталоги, в которых выполняются поиски исполняемых файлов, вызываемых опциями -exec, -execdir, -ok и -okdir.
POSIXLY_CORRECT
Определяет размер блока, используемого опциями -ls и -fls. Если POSIXLY_CORRECT установлена, блоки имеют размер 512 байт. В противном случае они имеют размер 1024 байт.
Установка этой переменной также отключает сообщения предупреждений (то есть подразумевает -nowarn) по умолчанию, поскольку POSIX требует, чтобы, за исключением выходных данных для -ok, все сообщения, выводимые в stderr, были диагностическими и должны приводить к ненулевому коду выхода.
Когда POSIXLY_CORRECT не установлена, -perm +zzz обрабатывается так же, как и -perm /zzz, если +zzz не является допустимым символическим режимом. Когда POSIXLY_CORRECT установлена, такие конструкции рассматриваются как ошибка.
Когда POSIXLY_CORRECT установлена, ответ на запрос, выдаваемый опцией -ok, интерпретируется в соответствии с системным каталогом сообщений, а не в соответствии с собственными переводами сообщений find.
TZ Влияет на часовой пояс, используемый для некоторых связанных со временем форматов опций -printf и
-fprintf.
ПРИМЕРЫ
Простой подход find|xargs
Найти файлы с именем core в каталоге /tmp или ниже и удалить их.
$ find /tmp -name core -type f -print | xargs /bin/rm -f
Обратите внимание, что это будет работать неправильно, если в именах файлов содержатся символы новой строки, одинарные или двойные кавычки или пробелы.
Более безопасный подход к использованию find -print0 | xargs -0
Найдите файлы с именем core в каталоге /tmp или ниже и удалите их, обрабатывая имена файлов таким образом, чтобы правильно обрабатывались имена файлов или каталогов, содержащие одинарные или двойные кавычки, пробелы или символы новой строки.
$ find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
Тест -name выполняется перед тестом -type, чтобы избежать необходимости вызывать stat(2) для каждого файла.
Обратите внимание, что между моментом, когда find обходит иерархию и выводит соответствующие имена файлов, и моментом, когда процесс, выполняемый xargs, работает с этим файлом, все еще существует гонка.
Обработка произвольных начальных точек
Учитывая, что другая программа proggy предварительно фильтрует и создает огромный список файлов, разделенных символом NULL, используйте эти файлы в качестве начальных точек и найдите все обычные, пустые файлы среди них:
$ proggy | find -files0-from - -maxdepth 0 -type f -empty
Использование -files0-from - означает, что имена начальных точек считываются из стандартного ввода, то есть из конвейера; и -maxdepth 0 гарантирует, что будут проверены только явно указанные записи, без рекурсивного поиска в каталоги (в случае, если одна из начальных точек является каталогом).
Выполнение команды для каждого файла
Запустите программу file для каждого файла в текущем каталоге или ниже.
$ find . -type f -exec file '{}' \;
Обратите внимание, что фигурные скобки заключены в одинарные кавычки, чтобы защитить их от интерпретации в качестве пунктуации оболочки. Точка с запятой также защищена с помощью обратной косой черты, хотя в этом случае можно было бы использовать и одинарные кавычки.
Во многих случаях предпочтительнее использовать синтаксис -exec ... + или -execdir ... +, чтобы повысить производительность и безопасность.
Однократный обход файловой системы для двух различных действий
Один раз обойдите файловую систему, перечислив файлы и каталоги с установленным битом set-user-ID в файл /root/suid.txt и большие файлы в файл /root/big.txt.
$ find / \
\( -perm -4000 -fprintf /root/suid.txt '%#m %u %p\n' \) , \
\( -size +100M -fprintf /root/big.txt '%-10s %p\n' \)
В этом примере используется символ продолжения строки '\' в первых двух строках, чтобы указать оболочке, что следует продолжить чтение команды на следующей строке.
Поиск файлов по времени изменения
Найдите файлы в вашем домашнем каталоге, которые были изменены за последние двадцать четыре часа.
$ find $HOME -mtime 0
Эта команда работает следующим образом, потому что время, прошедшее с момента последнего изменения каждого файла, делится на 24 часа, и любой остаток отбрасывается. Это означает, что для соответствия -mtime 0 файл должен был быть изменен в течение последних 24 часов.
Поиск файлов по разрешениям
Найдите файлы, которые являются исполняемыми, но не читаемыми.
$ find /sbin /usr/sbin -executable \! -readable -print
Найдите файлы, для которых владельцу и группе установлены разрешения на чтение и запись, но другие пользователи могут читать, но не записывать.
$ find . -perm 664
Файлы, соответствующие этим критериям, но имеющие другие установленные биты разрешений (например, если кто-то может выполнять файл), не будут найдены.
Найдите файлы, у которых установлены разрешения на чтение и запись для владельца и группы, а также разрешение на чтение для других пользователей, независимо от наличия каких-либо дополнительных битов разрешений (например, бита выполнения).
$ find . -perm -664
Эта команда найдет файл, у которого, например, установлен режим 0777.
Найдите файлы, которые доступны для записи для кого-либо (их владельца, их группы или любого другого).
$ find . -perm /222
Найдите файлы, которые доступны для записи либо для их владельца, либо для их группы.
$ find . -perm /220
$ find . -perm /u+w,g+w
$ find . -perm /u=w,g=w
Все три команды делают одно и то же, но первая использует восьмеричное представление режима файла, а две другие - символьную форму. Файлы не обязательно должны быть доступны для записи как для владельца, так и для группы, чтобы соответствовать условию поиска; достаточно одного из них.
Найдите файлы, которые доступны для записи как для их владельца, так и для их группы.
$ find . -perm -220
$ find . -perm -g+w,u+w
Обе эти команды делают одно и то же.
Более сложный поиск по разрешениям.
$ find . -perm -444 -perm /222 \! -perm /111
$ find . -perm -a+r -perm /a+w \! -perm /a+x
Эти две команды выполняют один и тот же поиск. Они ищут файлы, которые доступны для чтения для всех (-perm -444 или -perm -a+r), имеют хотя бы один установленный бит записи (-perm /222 или -perm /a+w), но не являются исполняемыми для кого-либо (! -perm /111 или ! -perm /a+x соответственно).
Исключение файлов и подкаталогов
Скопируйте содержимое каталога /source-dir в каталог /dest-dir, но исключите файлы и каталоги с именем .snapshot (и все, что в них находится). Также исключает файлы или каталоги, имя которых заканчивается на `~`, но не их содержимое.
$ cd /source-dir
$ find . -name .snapshot -prune -o \( \! -name '*~' -print0 \) \
| cpio -pmd0 /dest-dir
Конструкция -prune -o ( ... -print0 ) довольно распространена. Идея заключается в том, что выражение перед -prune соответствует элементам, которые нужно исключить. Однако само действие -prune возвращает значение true, поэтому следующее -o гарантирует, что правая часть будет оцениваться только для тех каталогов, которые не были исключены (содержимое исключенных каталогов даже не посещается, поэтому их содержимое не имеет значения). Выражение в правой части -o заключено в скобки только для ясности. Это подчеркивает, что действие -print0 выполняется только для элементов, к которым не было применено -prune. Поскольку условие and по умолчанию между тестами связывается сильнее, чем -o, это и так было бы так, но скобки помогают показать, что происходит.
Учитывая следующую структуру каталогов проектов и связанных с ними административных каталогов SCM, выполните эффективный поиск корней проектов:
$ find repo/ \
\( -exec test -d '{}/.svn' \; \
-or -exec test -d '{}/.git' \; \
-or -exec test -d '{}/CVS' \; \
\) -print -prune
Пример вывода:
repo/project1/CVS
repo/gnu/project2/.svn
repo/gnu/project3/.svn
repo/gnu/project3/src/.svn
repo/project4/.git
В этом примере -prune предотвращает ненужное углубление в каталоги, которые уже были обнаружены (например, мы не ищем в project3/src, потому что уже нашли project3/.svn), но при этом гарантирует, что будут найдены соседние каталоги (project2 и project3).
Другие полезные примеры
Поиск нескольких типов файлов.
$ find /tmp -type f,d,l
Поиск файлов, каталогов и символических ссылок в каталоге /tmp, передавая эти типы в виде списка, разделенного запятыми (расширение GNU), что в противном случае эквивалентно более длинной, но более переносимой команде:
$ find /tmp \( -type f -o -type d -o -type l \)
Поиск файлов с определенным именем needle и немедленное завершение работы после нахождения первого файла.
$ find / -name needle -print -quit
Демонстрация интерпретации форматных директив %f и %h действия -printf для некоторых особых случаев. Вот пример, включающий некоторые выходные данные.
$ find . .. / /tmp /tmp/TRACE compile compile/64/tests/find -maxdepth 0 -printf '[%h][%f]\n'
[.][.]
[.][..]
[][/]
[][tmp]
[/tmp][TRACE]
[.][compile]
[compile/64/tests][find]
СТАТУС ВЫХОДА
^ ind завершается со статусом 0, если все файлы успешно обработаны, и со статусом, отличным от 0, если произошли ошибки.
Это намеренно очень общее описание, но если возвращаемое значение не равно нулю, не следует полагаться на корректность результатов find.
При возникновении какой-либо ошибки find может немедленно остановиться, не завершив все указанные действия. Например, некоторые начальные точки могут быть не проверены или некоторые ожидающие вызовы программ для -exec ... {} + или -execdir ... {} + могут не быть выполнены.
ИСТОРИЯ
Программа find появилась в версии 5 Unix как часть проекта Programmer's Workbench и была написана Диком Хайтом. Даг МакИлрой в книге "A Research UNIX Reader: Annotated Excerpts from the Programmer’s Manual, 1971-1986" предоставляет некоторые дополнительные сведения; ее можно прочитать в Интернете по адресу [https://www.cs.dartmouth.edu/~doug/reader.pdf].
GNU find была изначально написана Эриком Декером, с улучшениями от Дэвида Маккензи, Джея Плетта и Тима Вуда. Идея find -print0 и xargs -0 принадлежит Дэну Бернштейну.
СОВМЕСТИМОСТЬ
Начиная с версии `findutils-4.2.2`, символы оболочки (`\`*'`, `\`?'` или `\`[]'`, например), используемые в шаблонах имен файлов, соответствуют ведущей точке `.` , поскольку это требуется в соответствии с интерпретацией IEEE POSIX 126.
Начиная с версии findutils-4.3.3, -perm /000 теперь соответствует всем файлам, а не ни одному.
Метки времени с наносекундным разрешением были реализованы в findutils-4.3.3.
Начиная с версии findutils-4.3.11, действие -delete устанавливает статус выхода find в ненулевое значение в случае сбоя. Однако find не будет завершаться немедленно. Ранее статус выхода find не изменялся в случае сбоя -delete.
Функция Добавлена в Также присутствует в
-files0-from 4.9.0
-newerXY 4.3.3 BSD
-D 4.3.1
-O 4.3.1
-readable 4.3.0
-writable 4.3.0
-executable 4.3.0
-regextype 4.2.24
-exec ... + 4.2.12 POSIX
-execdir 4.2.12 BSD
-okdir 4.2.12
-samefile 4.2.11
-H 4.2.5 POSIX
-L 4.2.5 POSIX
-P 4.2.5 BSD
-delete 4.2.3
-quit 4.2.3
-d 4.2.3 BSD
-wholename 4.2.0
-iwholename 4.2.0
-ignore_readdir_race 4.2.0
-fls 4.0
-ilname 3.8
-iname 3.8
-ipath 3.8
-iregex 3.8
Синтаксис -perm +MODE был удален в findutils-4.5.12, в пользу -perm /MODE. Синтаксис +MODE был объявлен устаревшим, начиная с findutils-4.2.21, выпущенной в 2005 году.
НЕ ЯВЛЯЮТСЯ ОШИБКАМИ
Неожиданный приоритет операторов
Команда find . -name afile -o -name bfile -print никогда не будет выводить afile, потому что она фактически эквивалентна find . -name afile -o ( -name bfile -a -print ). Помните, что приоритет -a выше, чем у -o, и когда между тестами не указан оператор, предполагается -a.
«пути должны предшествовать выражению» сообщение об ошибке
$ find . -name \*.c -print
find: paths must precede expression
find: possible unquoted pattern after predicate `-name'?
Это происходит, когда оболочка может расширить шаблон *.c до более одного имени файла, существующего в текущем каталоге, и передать полученные имена файлов в командную строку find следующим образом: find . -name frcode.c locate.c word_io.c -print Эта команда, конечно, не будет работать, потому что предикат -name допускает только один шаблон в качестве аргумента. Вместо этого следует заключать шаблон в кавычки или экранировать подстановочный знак, чтобы find мог использовать шаблон с подстановочным знаком во время поиска соответствующих имен файлов, а не имена файлов, расширенные родительской оболочкой: $ find . -name '*.c' -print $ find . -name *.c -print
ОШИБКИ
Существуют проблемы с безопасностью, присущие поведению, которое стандарт POSIX определяет для find, и которые, следовательно, не могут быть устранены. Например, действие -exec по своей сути небезопасно, и вместо этого следует использовать -execdir.
Переменная среды LC_COLLATE не влияет на действие -ok.
СООБЩЕНИЕ ОБ ОШИБКАХ
Онлайн-справка GNU findutils: [https://www.gnu.org/software/findutils/#get-help] Сообщайте обо всех ошибках перевода по адресу [https://translationproject.org/team/]
Сообщайте обо всех остальных проблемах через форму в системе отслеживания ошибок GNU Savannah: [https://savannah.gnu.org/bugs/?group=findutils] Общие темы, касающиеся пакета GNU findutils, обсуждаются в почтовой рассылке bug-findutils: [https://lists.gnu.org/mailman/listinfo/bug-findutils]
АВТОРСКИЕ ПРАВА
Copyright © 1990–2024 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later [https://gnu.org/licenses/gpl.html]. Это бесплатное программное обеспечение: вы можете изменять и распространять его. На него НЕТ ГАРАНТИЙ, в той мере, в которой это разрешено законом.
ССЫЛКИ
chmod(1), locate(1), ls(1), updatedb(1), xargs(1), lstat(2), stat(2), ctime(3), fnmatch(3), printf(3), strftime(3), locatedb(5), regex(7)
Полная документация [https://www.gnu.org/software/findutils/find] или доступна локально через: info find