Как использовать команду Linux и Unix найти

Команда 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), чтобы увидеть, как команда используется на вашем компьютере.

Ссылка на основную публикацию