Использование Linux и Unix Command: найти

Команда Linux и Unix find выполняет поиск файлов в иерархии каталогов.

Синтаксис команды find :

find [путь ...] [выражение]

Описание

Эта страница руководства описывает версию find для GNU. Команда find осуществляет поиск в дереве каталогов с корнями в каждом заданном имени файла, оценивая данное выражение слева направо в соответствии с правилами приоритета (см. Раздел «Операторы» ниже), пока результат не станет известен; другими словами, левая часть является ложной для операций и , истинной для или , когда find переходит к следующему имени файла ,

Первый аргумент, который начинается с:

  • ( или) ,

принимается за начало выражения; любые аргументы перед ним – это пути для поиска, а любые аргументы после него – остальная часть выражения. Если пути не указаны, используется текущий каталог. Если выражение не указано, используется выражение -print .

Команда find завершается со статусом 0, если все файлы успешно обработаны, больше 0, если возникают ошибки.

Выражения

Выражение состоит из опций (которые влияют на общую операцию, а не на обработку конкретного файла и всегда возвращают true), тесты (которые возвращают значение true или false) и действия (которые имеют побочные эффекты и возвращают true или ложное значение), все разделены операторами. Выражение -and предполагается там, где оператор опущен. Если выражение не содержит никаких действий, кроме -prune , тогда -print выполняется для всех файлов, для которых выражение является истинным.

Опции

Все параметры всегда возвращают true. Они всегда вступают в силу, а не обрабатываются только тогда, когда достигается их место в выражении. Поэтому для ясности лучше всего поместить их в начало выражения.












-daystart Измерение времени (для -amin, -atime, -cmin, -ctime, -mmin, и -mtime ) с начала сегодняшнего дня, а не с 24 часов назад.
-depth Обрабатывает содержимое каждого каталога до самого каталога.
-follow Разыменование символических ссылок. Подразумевает -noleaf .
-help или – help Напечатайте сводную информацию об использовании командной строки для find и выхода.
-maxdepth [число] Спуск по максимальному количеству уровней (неотрицательное целое число) каталогов ниже аргументов командной строки. Выражение -maxdepth 0 означает, что применяются только тесты и действия к аргументам командной строки.
-mindepth [число] Не применяйте какие-либо тесты или действия на уровнях меньше числа (неотрицательное целое число). Выражение -mindepth 1 означает обработку всех файлов, кроме аргументов командной строки.
-mount Не опускайте каталоги в других файловых системах. Альтернативное имя для -xdev для совместимости с некоторыми другими версиями find .
-noleaf Не оптимизируйте, предполагая, что каталоги содержат на 2 подкаталога меньше, чем количество жестких ссылок. *
-version или – версия Распечатайте find номер версии и выйдите.
-xdev Не опускайте каталоги в других файловых системах.

* Этот параметр необходим при поиске файловых систем, которые не соответствуют соглашению о связях каталогов Unix, таких как файловые системы CD-ROM или MS-DOS или точки монтирования тома AFS. Каждый каталог в обычной файловой системе Unix имеет как минимум 2 жесткие ссылки: свое имя и свой. (Период) вход. Кроме того, каждый из его подкаталогов (если есть) есть. запись связана с этим каталогом.

Когда find проверяет каталог, после того, как он зарегистрировал на два подкаталога меньше, чем число ссылок каталога, он знает, что остальные записи в каталоге не являются каталогами ( leaf файлы в дереве каталогов). Если необходимо проверить только имена файлов, нет необходимости их проверять; это дает значительное увеличение скорости поиска.

тесты

Числовые аргументы могут быть указаны как:






























Биты разрешения



















+ n Для более чем n.
-n Менее чем n.
<ет> п Для точно n.
-amin n К файлу последний раз обращались n минут назад.
-anewer [файл] К файлу последний раз обращались позже, чем файл . На -anewer влияет -follow только в том случае, если -follow предшествует -anewer в командной строке.
-atime n К файлу последний раз обращались n * 24 часа назад.
-cmin n Состояние файла было изменено в последний раз n несколько минут назад.
-cnewer [файл] Состояние файла в последний раз изменялось позднее, чем файл был изменен.
cnewer затрагивается -follow , только если -follow стоит перед -cnewer в командной строке.
-ctime n Состояние файла в последний раз изменялось n * 24 часа назад.
-empty Файл пуст и является обычным файлом или каталогом.
-False Всегда ложно.
-fstype [type] Файл находится в файловой системе указанного типа. Допустимые типы файловых систем различаются в разных версиях Unix; неполный список типов файловых систем, которые принимаются в той или иной версии Unix: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Вы можете использовать -printf с директивой% F, чтобы увидеть типы ваших файловых систем.
-gid n Идентификатор числовой группы файла: n .
-группа [gname] Файл принадлежит группе gname (допускается числовой идентификатор группы).
-ilname [pattern] Как -lname, но совпадение не чувствительно к регистру.
-iname [pattern] Как и -name , но совпадение не учитывает регистр. Например, шаблоны fo * и F ?? соответствуют именам файлов Foo , FOO , foo , fOo и т. д.
-inum n Файл имеет номер индекса n .
-ipath [pattern] Как и -path , но совпадение не учитывает регистр.
-iregex [pattern] Как -regex, но совпадение не учитывает регистр.
-линки n Файл содержит n ссылки.
-lname [pattern] Файл – это символическая ссылка, содержимое которой соответствует шаблону оболочки. Метасимволы не относятся к / или . специально.
-mmin n Данные файла были в последний раз изменены n минут назад.
-mtime n Данные файла были в последний раз изменены n * 24 часа назад.
-name [pattern] База имени файла (путь с удаленными ведущими каталогами) соответствует шаблону оболочки. Метасимволы ( * , ? и [] ) не совпадают с . в начале базы название. Чтобы игнорировать каталог и файлы в нем, используйте -prune ; см. пример в описании -path .
-newer [файл] Файл был изменен позже, чем файл . На выражение -newer -follow влияет только, если -follow предшествует -newer в командной строке.
-nouser Ни один пользователь не соответствует числовому идентификатору пользователя в файле.
-nogroup Ни одна группа не соответствует числовому идентификатору группы файла.
-path [pattern] Имя файла соответствует шаблону оболочки шаблону . Метасимволы не относятся к / или . специально; так, например, find. -path & apos; ./ sr * sc напечатает запись для каталога с именем ./src/misc (если он существует). Чтобы игнорировать все дерево каталогов, используйте -prune вместо проверки каждого файла в дереве. Например, чтобы пропустить каталог src/emacs и все файлы и каталоги в нем, а также распечатать имена других найденных файлов, выполните что-то вроде этого: find. -path './src/emacs' -prune -o -print
-perm [mode] файла имеют в точности [режим] (восьмеричное или символическое). Символьные режимы используют режим 0 в качестве отправной точки.
-perm -mode Все биты разрешений [mode] установлены для файла.
-perm + mode Любой из битов разрешений [режим] установлен для файла.
-regex [pattern] Имя файла соответствует регулярному выражению pattern . Это совпадение на всем пути, а не поиск. Например, чтобы сопоставить файл с именем ./fubar3, вы можете использовать регулярное выражение . * Bar. или . * B. * 3 , но не b. . * r3 .
-size n [bckw] Файл использует n единиц пространства.Единицами измерения являются блоки по 512 байт по умолчанию или если b следует n , байты, если c следует n , килобайты, если k следует n , или 2 -байтовые слова, если w следует n . Размер не учитывает косвенные блоки, но учитывает блоки в разреженных файлах, которые фактически не выделены.
-True Всегда верно.
-типа c Файл имеет тип c :
б Блок (буферизованный) специальный
с Специальный (небуферизованный) символ
д Каталог
р Именованный канал (FIFO)
е Обычный файл
л Символьная ссылка
s розетка
D door (Solaris)
-uid n Числовой идентификатор пользователя файла: n .
-используемый n К файлу последний раз обращались через n дней после последнего изменения его состояния.
-user uname Файл принадлежит пользователю uname (числовой идентификатор пользователя разрешен).
-xtype c То же, что и -type , если файл не является символической ссылкой. Для символических ссылок: если -follow не задано, то true, если файл является ссылкой на файл типа c ; если задано -follow , true, если c равно l. Другими словами, для символических ссылок
-xtype проверяет тип файла, который -type не проверяет.

действия

-exec команда ;

Выполнить команду ; true, если возвращается 0 статус. Все последующие аргументы find считаются аргументами команды до аргумента, состоящего из `; ‘ встречается. Строка `{} ‘заменяется текущим именем файла, которое обрабатывается везде, где оно встречается в аргументах команды, а не только в аргументах, где она одна, как в некоторых версиях find . Обе эти конструкции, возможно, должны быть экранированы (с `\ ‘) или заключены в кавычки, чтобы защитить их от расширения оболочкой. Команда выполняется в начальном каталоге.

-fls файл

Правда; как -ls, но записывать в файл , как -fprint.

-fprint файл

Правда; распечатать полное имя файла в файл файл . Если файл не существует при запуске find , он создается; если он существует, он усекается. Имена файлов “/dev/stdout ” и “/dev/stderr ” обрабатываются специально; они относятся к стандартному выводу и стандартному выводу ошибок соответственно.

-fprint0 файл

Правда; как -print0, но записывать в файл , как -fprint.

-fprintf файл Формат

Правда; как -printf, но записывать в файл , как -fprint.

-ok команда ;

Как -exec, но сначала спросить пользователя (на стандартном вводе); если ответ не начинается с `y ‘или` Y’, не запускайте команду и возвращайте false.

-Распечатать

Правда; Напечатайте полное имя файла на стандартном выводе, за которым следует новая строка.

-print0

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

-printf Формат

Правда; выведите format на стандартный вывод, интерпретируя экранирование `\ ‘и директивы`%’. Ширина и точность полей могут быть определены как с функцией `printf ‘C. В отличие от -print, -printf не добавляет символ новой строки в конце строки. Побеги и директивы:

\ а

Тревожный звонок.

\ б

Backspace.

\ с

Немедленно прекратите печать из этого формата и очистите вывод.

\ е

Форма подачи.

\ п

Новая линия.

Возврат каретки.

\ т

Горизонтальная вкладка.

\ v

Вертикальная вкладка.

\\

Буквальная обратная косая черта (`\ ‘).

\ NNN

Символ с кодом ASCII NNN (восьмеричный).

Символ `\ ‘, за которым следует любой другой символ, обрабатывается как обычный символ, поэтому они оба печатаются.

%%

Буквальный знак процента.

% в

Время последнего доступа к файлу в формате, возвращаемом функцией C `ctime ‘.

% A к

Время последнего доступа к файлу в формате, указанном в 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 ‘.

% C к

Время последнего изменения состояния файла в формате, указанном в k , что соответствует% A.

% d

Глубина файла в дереве каталогов; 0 означает, что файл является аргументом командной строки.

% е

Имя файла с удаленными ведущими каталогами (только последний элемент).

% F

Тип файловой системы, в которой находится файл; это значение может быть использовано для -fstype.

Имя группы файла или числовой идентификатор группы, если у группы нет имени.

Числовой идентификатор группы файла.

%час

Ведущие каталоги имени файла (все, кроме последнего элемента).

%ЧАС

Аргумент командной строки, по которому был найден файл.

Номер индекса файла (в десятичном формате).

% к

Размер файла в 1 Кбайтах (округлено в большую сторону).

% л

Объект символической ссылки (пустая строка, если файл не является символической ссылкой).

% м

Биты разрешения файла (в восьмеричном).

% п

Количество жестких ссылок на файл.

%п

Имя файла

Имя файла с именем аргумента командной строки, под которым он был найден, удалено.

% s

Размер файла в байтах.

% т

Время последней модификации файла в формате, возвращаемом функцией C `ctime ‘.

% Т <ет> к

Время последнего изменения файла в формате, указанном в k , что соответствует% A.

% U

Имя пользователя файла или числовой идентификатор пользователя, если у пользователя нет имени.

% U

Числовой идентификатор пользователя файла.

Символ `% ‘, за которым следует любой другой символ, отбрасывается (но другой символ печатается).

-чернослив

Если глубина не задана, верно; не спускаться по текущему каталогу.
Если задана -depth, ложь; нет эффекта.

-ls

Правда; вывести текущий файл в формате `ls -dils ‘на стандартный вывод. Количество блоков составляет 1 КБ, если не установлена ​​переменная окружения POSIXLY_CORRECT, в этом случае используются 512-байтовые блоки.

операторы

Перечислено в порядке убывания приоритета:

( выражение )

Приоритет силы.

! выражение

Истинно, если expr равно false.

-на выражение

Такой же как ! выражение .

expr1 expr2

И (подразумевается); expr2 не оценивается, если expr1 имеет значение false.

выражение1 -a <ет> expr2

То же, что expr1 expr2 .

выражение1 -И <ет> expr2

То же, что expr1 expr2 .

выражение1 -o expr2

Или же; expr2 не оценивается, если expr1 имеет значение true.

выражение1 -или expr2

То же, что expr1 -o expr2 .

выражение1 expr2

Список; оба expr1 и expr2 всегда оцениваются. Значение expr1 отбрасывается; значение списка – это значение expr2 .

Примеры

  find/home -user joe  

Найдите каждый файл в каталоге/home, принадлежащий пользователю joe.

  find/usr -name * stat  

Найдите каждый файл в каталоге/usr, заканчивающийся на “.stat”.

  find/var/spool -mtime +60  

Найдите все файлы в каталоге/var/spool, которые были изменены более 60 дней назад.

  find/tmp -name core -type f -print | xargs/bin/rm -f  

Найдите файлы с именем core в каталоге /tmp или ниже и удалите их. Обратите внимание, что это будет работать неправильно, если есть какие-либо имена файлов, содержащие символы новой строки, одинарные или двойные кавычки или пробелы.

  find/tmp -name core -type f -print0 | xargs -0/bin/rm -f  

Найдите файлы с именем core в каталоге /tmp или ниже и удалите их, обрабатывая имена файлов таким образом, чтобы имена файлов или каталогов, содержащие одинарные или двойные кавычки, пробелы или переводы строк правильно обрабатывается. Тест -name предшествует тесту -type , чтобы не вызывать stat (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 .

  find $ HOME -mtime 0  

Поиск файлов в вашем домашнем каталоге, которые были изменены за последние двадцать четыре часа. Эта команда работает таким образом, потому что время, прошедшее с момента последнего изменения каждого файла, делится на 24 часа, а все остальные отбрасываются. Это означает, что для соответствия -mtime

0 , файл должен иметь модификацию в прошлом, то есть менее 24 часов назад.

  найти. -perm 664  

Поиск файлов, которые имеют права на чтение и запись для своего владельца и группы, но которые другие пользователи могут читать, но не могут писать. Файлы, которые соответствуют этим критериям, но имеют другие установленные права доступа (например, если кто-то может выполнить файл), не будут сопоставлены.

  найти. -perm -664  

Поиск файлов, которые имеют права на чтение и запись для своего владельца и группы, и которые могут читать другие пользователи, независимо от наличия каких-либо дополнительных битов разрешения (например, исполняемого бита). Это будет соответствовать файлу, который имеет режим 0777, например.

  найти. -perm/222  

Поиск файлов, которые могут быть кем-то записаны (их владельцем, группой или кем-либо еще).

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

Оцените статью
Solutics.ru
Добавить комментарий