Команда find для Linux и Unix выполняет поиск файлов в иерархии каталогов.
Синтаксис команды find:
найти [путь ...] [выражение]
Описание
Эта страница руководства описывает GNU-версию find. Команда find ищет дерево каталогов с корнем в каждом заданном имени файла, оценивая данное выражение слева направо в соответствии с правилами приоритета (см. Раздел «Операторы» ниже), пока результат не станет известен; другими словами, левая часть является ложной для и операций, истинной для или, и в этой точке поиск переходит к следующему имени файла.
Первый аргумент, который начинается с:
- —
- ( или же ) ,
- !
принимается за начало выражения; любые аргументы перед ним — это пути для поиска, а любые аргументы после него — остальная часть выражения. Если пути не указаны, используется текущий каталог. Если выражение не указано, используется выражение -print.
Команда find завершается со статусом 0, если все файлы обработаны успешно, больше 0, если возникают ошибки.
Выражения
Выражение состоит из опций (которые влияют на общую операцию, а не на обработку конкретного файла и всегда возвращают true), тесты (которые возвращают значение true или false) и действия (которые имеют побочные эффекты и возвращают true или ложное значение), все разделены операторами. Выражение -and предполагается там, где оператор опущен. Если выражение не содержит никаких действий, кроме -prune, то -print выполняется для всех файлов, для которых выражение является истинным.
Параметры
Все параметры всегда возвращают true. Они всегда вступают в силу, а не обрабатываются только тогда, когда достигается их место в выражении. Поэтому для ясности лучше всего поместить их в начало выражения.
-daystart | Измерьте время (для -amin, -atime, -cmin, -ctime, -mmin и -mtime) с начала сегодняшнего дня, а не с 24 часов назад. |
-глубина | Обработайте содержимое каждого каталога до самого каталога. |
-следовать | Разыменование символических ссылок. Подразумевает -noleaf. |
-помочь или —help | Вывести сводную информацию об использовании командной строки для поиска и выхода. |
-maxdepth [число] | Опускать не более числа уровней (неотрицательное целое число) каталогов ниже аргументов командной строки. Выражение -maxdepth 0 означает только применение тестов и действий к аргументам командной строки. |
-mindepth [число] | Не применяйте какие-либо тесты или действия на уровнях меньше, чем число (неотрицательное целое число). Выражение -mindepth 1 означает обрабатывать все файлы, кроме аргументов командной строки. |
-крепление | Не спускайте каталоги на другие файловые системы. Альтернативное имя для -xdev для совместимости с некоторыми другими версиями find. |
-noleaf | Не оптимизируйте, предполагая, что каталоги содержат на 2 подкаталога меньше, чем количество жестких ссылок. * |
-версия или —version | Напечатайте номер версии поиска и выйдите. |
-xdev | Не спускайте каталоги на другие файловые системы. |
* Этот параметр необходим при поиске файловых систем, которые не соответствуют соглашению о связях каталогов Unix, таких как файловые системы CD-ROM или MS-DOS или точки монтирования тома AFS. Каждый каталог в обычной файловой системе Unix имеет как минимум 2 жесткие ссылки: свое имя и свой. (Период) вход. Кроме того, каждый из его подкаталогов (если есть) есть. запись связана с этим каталогом.
Когда find проверяет каталог, после того, как он зарегистрировал на два подкаталога меньше, чем количество ссылок каталога, он знает, что остальные записи в каталоге не являются каталогами (листовые файлы в дереве каталогов). Если необходимо проверить только имена файлов, нет необходимости их проверять; это дает значительное увеличение скорости поиска.
тесты
Числовые аргументы могут быть указаны как:
+N | Для больше чем n. |
-N | Для менее чем n. |
N | Для ровно n. |
-амин н | Последний раз к файлу обращались n минут назад. |
-заново [файл] | Последний раз к файлу обращались позже, чем к файлу. На -anewer влияет -follow только в том случае, если -follow предшествует -anewer в командной строке. |
-когда-то | Последний раз к файлу обращались n * 24 часа назад. |
-Cmin N | Статус файла был последний раз изменен n минут назад. |
-cnewer [файл] | Последний раз статус файла изменялся позже, чем файл был изменен. -Параметр -follow влияет на cnewer только в том случае, если -follow предшествует -cnewer в командной строке. |
-ctime n | Статус файла был последний раз изменен n * 24 часа назад. |
-пустой | Файл пуст и является обычным файлом или каталогом. |
-ложный | Всегда ложно |
-fstype [тип] | Файл находится в файловой системе указанного типа. Допустимые типы файловых систем различаются в разных версиях Unix; неполный список типов файловых систем, которые принимаются в той или иной версии Unix: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Вы можете использовать -printf с директивой% F, чтобы увидеть типы ваших файловых систем. |
-читай | Числовой идентификатор группы файла — n. |
-группа [имя] | Файл принадлежит группе gname (допускается числовой идентификатор группы). |
-ilname [шаблон] | Как -lname, но совпадение не чувствительно к регистру. |
-Инаме [шаблон] | Как -name, но совпадение не чувствительно к регистру. Например, шаблоны fo * и F ?? сопоставлять имена файлов Foo, FOO, foo, fOo и т. д. |
-Inum N | Файл имеет номер индекса n. |
-ipath [шаблон] | Вроде -path, но совпадение нечувствительно к регистру. |
-iregex [шаблон] | Вроде -regex, но совпадение не чувствительно к регистру. |
-ссылки н | Файл имеет n ссылок. |
-lname [шаблон] | Файл — это символическая ссылка, содержимое которой соответствует шаблону оболочки. Метасимволы не лечат / или же . специально. |
-Ммин н | Данные файла были последний раз изменены n минут назад. |
-время | Данные файла были последний раз изменены * 24 часа назад. |
-имя [образец] | База имени файла (путь с удаленными ведущими каталогами) соответствует шаблону оболочки. Метасимволы (*, ?, а также []) не соответствуют . в начале базового имени. Чтобы игнорировать каталог и файлы в нем, используйте -prune; см. пример в описании -path. |
-более новый [файл] | Файл был изменен позже, чем файл. На выражение -newer -follow влияет только, если -follow предшествует -newer в командной строке. |
-nouser | Ни один пользователь не соответствует числовому идентификатору пользователя в файле. |
-nogroup | Ни одна группа не соответствует числовому идентификатору группы в файле. |
-путь [образец] | Имя файла соответствует шаблону оболочки. Метасимволы не лечат / или же . специально; так, например,находить . -path './sr*sc напечатает запись для каталога с именем ./src/misc (если он существует). Чтобы игнорировать все дерево каталогов, используйте -prune вместо проверки каждого файла в дереве. Например, чтобы пропустить каталог src / emacs и все файлы и каталоги в нем, и напечатать имена других найденных файлов, сделайте что-то вроде этого: находить . -path './src/emacs' -prune -o -print |
-Пермь [режим] | Биты прав доступа к файлу в точности [mode] (восьмеричные или символические). Символьные режимы используют режим 0 в качестве отправной точки. |
-Пермский режим | Все биты прав доступа [mode] установлены для файла. |
-Пермь + режим | Любой из битов прав доступа [mode] устанавливается для файла. |
-регулярное выражение [шаблон] | Имя файла соответствует шаблону регулярного выражения. Это совпадение на всем пути, а не поиск. Например, чтобы сопоставить файл с именем ./fubar3, вы можете использовать регулярное выражение .*бар. или же .* Б. * 3, но нет б. * r3. |
-размер n [bckw] | Файл использует n единиц пространства. По умолчанию это 512-байтовые блоки, или если b следует за n, байты, если c следует за n, килобайты, если k следует за n, или 2-байтовые слова, если w следует за n. Размер не учитывает косвенные блоки, но учитывает блоки в разреженных файлах, которые фактически не выделены. |
-правда | Всегда правда. |
-тип с | Файл имеет тип c: |
б | Блок (буферизованный) специальный |
с | Персонаж (небуферизованный) специальный |
d | каталог |
п | Именованная труба (FIFO) |
е | Обычный файл |
L | Символьная ссылка |
s | Разъем |
D | дверь (солярис) |
-UID N | Числовой идентификатор пользователя файла — n. |
-использовал н | Последний раз к файлу обращались через n дней после последнего изменения его состояния. |
-пользователь uname | Файл принадлежит пользователю uname (допускается числовой идентификатор пользователя). |
-xtype c | То же, что и -type, если файл не является символической ссылкой. Для символических ссылок: если -follow не задано, true, если файл является ссылкой на файл типа c; если задано -follow, true, если c равно l. Другими словами, для символических ссылок, -xtype проверяет тип файла, который не проверяет -type. |
действия
-команда ехес;
Выполнить команду; true, если возвращается 0 статус. Все последующие аргументы находить принимаются за аргументы команды до аргумента, состоящего из `; ‘ встречается. Строка `{} ‘заменяется текущим именем файла, обрабатываемым везде, где оно встречается в аргументах команды, а не только в аргументах, где оно одиночно, как в некоторых версиях находить. Обе эти конструкции, возможно, должны быть экранированы (с `\ ‘) или заключены в кавычки, чтобы защитить их от расширения оболочкой. Команда выполняется в начальном каталоге.
-FLS файл
Правда; как -ls, но записать в файл как -fprint.
-FPrint файл
Правда; выведите полное имя файла в файл. Если файл не существует, когда находить запущен, он создан; если он существует, он усекается. Имена файлов « / dev / stdout » и « / dev / stderr » обрабатываются специально; они относятся к стандартному выводу и стандартному выводу ошибок соответственно.
-fprint0 файл
Правда; как -print0, но записать в файл как -fprint.
-Формат файла fprintf
Правда; как -printf, но записывать в файл как -fprint.
-ОК команда;
Как -exec, но сначала спросить пользователя (на стандартном вводе); если ответ не начинается с `y ‘или` Y’, не запускайте команду и возвращайте false.
-Распечатать
Правда; Напечатайте полное имя файла на стандартном выводе, за которым следует новая строка.
-print0
Правда; выведите полное имя файла на стандартный вывод с последующим нулевым символом. Это позволяет правильно интерпретировать имена файлов, содержащие переводы строк, программами, обрабатывающими находить выход.
-формат Printf
Правда; выводит формат на стандартный вывод, интерпретируя экранирование `\ ‘и директивы`%’. Ширина и точность полей могут быть определены как с функцией `printf ‘C. В отличие от -print, -printf не добавляет символ новой строки в конце строки. Побеги и директивы:
\ а
Тревожный звонок.
\ б
Backspace.
\ с
Немедленно прекратите печать из этого формата и очистите вывод.
\ е
Форма подачи.
\ п
Новая линия.
\р
Возврат каретки.
\ т
Горизонтальная вкладка.
\ v
Вертикальная вкладка.
\\
Буквальная обратная косая черта (`\ ‘).
\ NNN
Символ с кодом ASCII NNN (восьмеричный).
Символ `\ ‘, за которым следует любой другой символ, обрабатывается как обычный символ, поэтому они оба печатаются.
%%
Буквальный знак процента.
% в
Время последнего доступа к файлу в формате, возвращаемом функцией C `ctime ‘.
% Ak
Время последнего доступа к файлу в формате, указанном k, который является либо `@ ‘, либо директивой для функции C` strftime’. Возможные значения для k перечислены ниже; некоторые из них могут быть недоступны во всех системах из-за различий в strftime между системами.
@
секунд с 1 января 1970 года, 00:00 по Гринвичу.
Поля времени:
ЧАС
час (00..23)
я
час (01.12.12)
К
час (0..23)
L
час (1..12)
M
минута (00..59)
п
AM или PM региона
р
время 12 часов (чч: мм: сс [AP] M)
S
второй (00..61)
T
время, 24 часа (чч: мм: сс)
Икс
временное представление локали (H: M: S)
Z
часовой пояс (например, EDT) или ничего, если часовой пояс не определяется
Поля даты:
сокращенное название дня недели (Sun..Sat)
полное название дня недели, переменная длина (воскресенье .. суббота)
б
сокращенное название месяца в локали (Jan..Dec)
В
полное название месяца в локали, переменная длина (январь .. декабрь)
с
дата и время локали (сб. 04 ноября 12:02:33 EST 1989)
d
день месяца (01..31)
D
дата (мм / дд / гг)
час
такой же как б
J
день года (001..366)
м
месяц (01.12.12)
U
номер недели в году с первым днем недели в воскресенье (00..53)
вес
день недели (0..6)
W
номер недели в году с понедельником в качестве первого дня недели (00..53)
Икс
представление даты в локали (мм / дд / гг)
Y
последние две цифры года (00..99)
Y
год (1970 …)
% б
Размер файла в блоках по 512 байт (округляется в большую сторону).
% с
Время последнего изменения состояния файла в формате, возвращаемом функцией C `ctime ‘.
% Ck
Время последнего изменения состояния файла в формате, заданном параметром k, что соответствует значению% A.
% d
Глубина файла в дереве каталогов; 0 означает, что файл является аргументом командной строки.
% е
Имя файла с удаленными ведущими каталогами (только последний элемент).
% F
Тип файловой системы, в которой находится файл; это значение может быть использовано для -fstype.
%грамм
Имя группы файла или числовой идентификатор группы, если у группы нет имени.
%ГРАММ
Числовой идентификатор группы файла.
%час
Ведущие каталоги имени файла (все, кроме последнего элемента).
%ЧАС
Аргумент командной строки, по которому был найден файл.
%я
Номер индекса файла (в десятичном формате).
% к
Размер файла в 1 Кбайтах (округлено в большую сторону).
% л
Объект символической ссылки (пустая строка, если файл не является символической ссылкой).
% м
Биты разрешения файла (в восьмеричном).
% п
Количество жестких ссылок на файл.
%п
Имя файла
%П
Имя файла с именем аргумента командной строки, под которым он был найден, удалено.
% s
Размер файла в байтах.
% т
Время последней модификации файла в формате, возвращаемом функцией C `ctime ‘.
% Тк
Время последнего изменения файла в формате, заданном параметром k, то же самое, что и для% A.
% U
Имя пользователя файла или числовой идентификатор пользователя, если у пользователя нет имени.
% U
Числовой идентификатор пользователя файла.
Символ `% ‘, за которым следует любой другой символ, отбрасывается (но другой символ печатается).
-чернослив
Если глубина не задана, верно; не спускаться по текущему каталогу.
Если задана -depth, ложь; нет эффекта.
-Ls
Правда; вывести текущий файл в формате `ls -dils ‘на стандартный вывод. Количество блоков составляет 1K блоков, если только не установлена переменная окружения POSIXLY_CORRECT, в этом случае используются 512-байтовые блоки.
операторы
Перечислено в порядке убывания приоритета:
(Выражение)
Приоритет силы.
! выраж
Истинно, если expr ложно.
-не выр
Такой же как ! выраж.
expr1 expr2
И (подразумевается); expr2 не оценивается, если expr1 имеет значение false.
выражение1 -a выражение2
То же, что expr1 expr2.
выражение1 й expr2
То же, что expr1 expr2.
выражение1 -o expr2
Или же; expr2 не оценивается, если expr1 имеет значение true.
выражение1 -или expr2
То же, что expr1 -o expr2.
expr1, expr2
Список; оба expr1 и expr2 всегда оцениваются. Значение expr1 отбрасывается; значение списка является значением expr2.
Примеры
найти / домой -пользователь Джо
Найдите каждый файл в каталоге / home, принадлежащий пользователю joe.
найти / usr -name * stat
Найдите каждый файл в каталоге / usr, заканчивающийся на «.stat».
найти / var / spool -mtime +60
Найдите все файлы в каталоге / var / spool, которые были изменены более 60 дней назад.
find / tmp -name core -type f -print | xargs / bin / rm -f
Найти файлы с именем ядро в или ниже каталога / TMP и удалите их. Обратите внимание, что это будет работать неправильно, если есть какие-либо имена файлов, содержащие символы новой строки, одинарные или двойные кавычки или пробелы.
find / tmp -name core -type f -print0 | xargs -0 / bin / rm -f
Найти файлы с именем ядро в или ниже каталога / TMP и удалять их, обрабатывая имена файлов таким образом, чтобы правильно обрабатывались имена файлов или каталогов, содержащие одинарные или двойные кавычки, пробелы или переводы строк. -имя тест приходит раньше -тип тест, чтобы избежать необходимости звонить стат (2) на каждом файле.
находить . -type f -exec файл '{}' \;
Запускает `file ‘для каждого файла в или ниже текущего каталога. Обратите внимание, что фигурные скобки заключены в одинарные кавычки, чтобы защитить их от интерпретации как пунктуации сценария оболочки. Точка с запятой аналогичным образом защищена с помощью обратной косой черты, хотя ‘;’ можно было бы использовать и в этом случае.
find / \ (-perm -4000 -fprintf /root/suid.txt '% # m% u% p \ n' \), \
\ (-size + 100M -fprintf /root/big.txt '% -10s% p \ n' \)
Пройдите по файловой системе всего один раз, перечислив файлы и каталоги setuid в /root/suid.txt и большие файлы в /root/big.txt.
найти $ HOME -mtime 0
Поиск файлов в вашем домашнем каталоге, которые были изменены за последние двадцать четыре часа. Эта команда работает таким образом, потому что время, прошедшее с момента последнего изменения каждого файла, делится на 24 часа, а все остальные отбрасываются. Это означает, что для соответствия -время изменения
, файл должен иметь изменения в прошлом, которые были менее 24 часов назад.
находить . срок 664
Поиск файлов, которые имеют права на чтение и запись для своего владельца и группы, но которые другие пользователи могут читать, но не могут писать. Файлы, которые соответствуют этим критериям, но имеют другие установленные права доступа (например, если кто-то может выполнить файл), не будут сопоставлены.
находить . -perm -664
Поиск файлов, которые имеют права на чтение и запись для своего владельца и группы, и которые могут читать другие пользователи, независимо от наличия каких-либо дополнительных битов разрешения (например, исполняемого бита). Это будет соответствовать файлу, который имеет режим 0777, например.
находить . -перм / 222
Поиск файлов, которые могут быть кем-то записаны (их владельцем, группой или кем-либо еще).
находить . -перм / 220
находить . -perm / u + w, g + w
находить . -perm / u = w, g = w
Все три из этих команд делают то же самое, но первая использует восьмеричное представление режима файла, а две другие используют символическую форму. Все эти команды ищут файлы, которые доступны для записи либо их владельцу, либо их группе. Файлы не должны быть доступны для записи как владельцу, так и группе для сопоставления; либо подойдет.
находить . -пермь -220
находить . -perm -g + w, u + w
Обе эти команды делают одно и то же; поиск файлов, которые доступны для записи как их владельцем, так и их группой.
находить . -perm -444 -perm / 222! -perm / 111
находить . -perm -a + r -perm / a + w! -perm / a + x
Обе эти команды выполняют поиск файлов, которые доступны для чтения всем (-perm -444 или -perm -a + r), имеют по крайней мере установленный бит записи (-perm / 222 или -perm / a + w), но не являются исполняемыми для всех (! -perm / 111 и! -perm / a + x соответственно)
Важный: Используйте команду man (% man), чтобы увидеть, как команда используется на вашем компьютере.