Skip to main content

Использование команд Linux и Unix

Linux команда find - команда поиска файлов. (Июнь 2025)

Linux команда find - команда поиска файлов. (Июнь 2025)
Anonim

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

Синтаксис для находить команда:

find путь … выражение

Описание

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

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

  • -
  • ( или же ),
  • !

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

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

Выражения

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

Опции

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

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

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

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

тесты

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

+ п Для большего, чем п.
-n За менее чем п.
N Для точно п.
-amin n Файл был последним. N минут назад.
-anewer файл Файл был последним доступным в последнее время, чем файл был изменен. -anewer влияет на -follow только в том случае, если -follow появляется до -anewer в командной строке.
-time n Файл был последним. N * 24 часа назад.
-cmin n Последний статус файла N минут назад.
-cnewer файл Статус файла в последний раз был изменен совсем недавно, чем файл был изменен.- cnewer зависит от -следовать только если -следовать предшествует -cnewer в командной строке.
-ctime n Последний статус файла N * 24 часа назад.
-empty Файл пуст и является либо обычным файлом, либо каталогом.
-ложный Всегда ложно.
-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 подобно -название , но совпадение не зависит от регистра. Например, шаблоны Ф.О. * а также F ?? соответствовать именам файлов Foo , FOO , Foo , Foo , так далее.
-inum n Файл имеет номер inode N .
-ipath pattern подобно -дорожка , но совпадение не зависит от регистра.
-iregex pattern Как -regex, но совпадение не зависит от регистра.
-links n Файл имеет N ссылки.
-lname pattern Файл представляет собой символическую ссылку, содержимое которой соответствует шаблону оболочки. Метасимволы не обрабатываются / или же . специально.
-mmin n Данные последнего файла были изменены N минут назад.
-mtime n Данные последнего файла были изменены N * 24 часа назад.
-name pattern База имени файла (путь с удаленными ведущими каталогами) соответствует шаблону оболочки. Метасимволы (*, ?, а также ) не соответствуют . в начале базового имени. Чтобы игнорировать каталог и файлы под ним, используйте -чернослив ; см. пример в описании -дорожка .
-newer файл Файл был изменен совсем недавно файл , Выражение -новее зависит от -следовать только если -следовать предшествует -новее в командной строке.
-nouser Никому не соответствует числовой идентификатор пользователя.
-nogroup Ни одна группа не соответствует идентификатору числовой группы файла.
-path pattern Имя файла соответствует шаблону оболочки шаблон , Метасимволы не обрабатываются / или же . специально; так, например,находить . -path './sr*sc будет печатать запись для каталога с именем ./src/misc (если таковой существует). Чтобы игнорировать полное дерево каталогов, используйте -чернослив а не проверять каждый файл в дереве. Например, чтобы пропустить каталог src / emacs и все файлы и каталоги под ним, а также распечатать имена других найденных файлов, выполните следующие действия:находить . -path './src/emacs -prune -o -print
-perm mode Биты разрешения файла точно Режим (восьмеричный или символический). Символические режимы используют режим 0 как отправную точку.
-perm -mode Все биты разрешения Режим для файла.
-перм + режим Любой из битов разрешения Режим для файла.
-regex pattern Имя файла соответствует регулярному выражению шаблон , Это совпадение по всему пути, а не к поиску. Например, чтобы соответствовать файлу с именем ./fubar3, вы можете использовать регулярное выражение .*бар. или же . * Б. * 3, но нет б. * r3.
-размер n bckw Использование файлов N единиц пространства. Блоки по умолчанию являются 512-байтовыми блоками или если b следует N , байты, если c следует N , килобайт, если k следует N , или 2-байтные слова, если w следует N , Размер не подсчитывает непрямые блоки, но он подсчитывает блоки в разреженных файлах, которые фактически не распределены.
-правда Всегда правда.
Тип c Файл имеет тип с :
б Блочный (буферизованный) специальный
с Характер (небуферизованный) специальный
d каталог
п Именованная труба (FIFO)
е Обычный файл
L Символическая ссылка
s Разъем
D дверь (Solaris)
-uid n Числовой идентификатор пользователя файла N .
-used n Файл был последним. N дней после его последнего изменения.
-user uname Файл принадлежит пользователю uname (допускается числовой идентификатор пользователя).
-xtype c Такой же как -тип если файл не является символической ссылкой. Для символических ссылок: if -следовать не задано, true, если файл является ссылкой на файл типа с ; если -следовать было дано, правда, если с l. Другими словами, для символических ссылок, -xtype проверяет тип файла, который -тип не проверено.

действия

-exec команда ;

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

-fls файл

Правда; как -ls, но пишите файл как -fprint.

-fprint файл

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

-fprint0 файл

Правда; как -print0, но пишите файл как -fprint.

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

Правда; как -printf, но пишите файл как -fprint.

-Хорошо команда ;

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

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

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

-print0

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

-printf формат

Правда; Распечатать формат на стандартный вывод, интерпретируя escape-последовательности ` 'и`%'. Ширины полей и уточнения могут быть указаны как с функцией `printf 'C. В отличие от -print, -printf не добавляет новую строку в конце строки. Убеждения и директивы:

а

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

б

Backspace.

с

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

е

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

п

Новая линия.

р

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

т

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

v

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

\

Литеральная обратная косая черта (` ').

NNN

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

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

%%

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

% в

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

% A К

Последнее время доступа к файлу в формате, указанном К , который является либо `@ ', либо директивой для функции C` strftime'. Возможные значения для К перечислены ниже; некоторые из них могут быть недоступны во всех системах из-за различий в «strftime» между системами.

@

секунд с 1 января 1970 года, 00:00 по Гринвичу.

Поля времени:

ЧАС

час (00..23)

я

час (01..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)

полное имя рабочего дня locale, переменная длина (воскресенье … Суббота)

б

название сокращенного месяца locale (Jan..Dec)

В

полное имя месяца locale, переменная длина (январь .. декабрь)

с

дата и время локали (сб ноя 04 12:02:33 по восточному времени 1989 г.)

d

день месяца (01..31)

D

дата (мм / дд / гг)

час

так же, как b

J

день года (001..366)

м

месяц (01..12)

U

недельное число года с воскресеньем как первый день недели (00..53)

вес

день недели (0..6)

W

недельное число года с понедельником как первый день недели (00..53)

Икс

Представление даты локали (мм / дд / гг)

Y

последние две цифры года (00..99)

Y

год (1970 …)

% б

Размер файла в 512-байтных блоках (округленный).

% с

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

% С К

Последнее изменение статуса файла в формате, указанном в К , что совпадает с% A.

% d

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

% е

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

% F

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

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

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

%час

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

%ЧАС

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

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

% к

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

% л

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

% м

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

% п

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

%п

Имя файла.

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

% s

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

% т

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

% Т К

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

% U

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

% U

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

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

-чернослив

Если -depth не задано, true; не опускайте текущий каталог.Если задано -depth, false; нет эффекта.

-ls

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

операторы

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

( выраж )

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

! выраж

Правда, если выраж false.

-не выраж

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

expr1 expr2

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

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

Такой же как expr1 expr2 .

выражение1 -а также expr2

Такой же как expr1 expr2 .

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

Или же; expr2 не оценивается, если выражение1 правда.

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

Такой же как выражение1 -о expr2 .

выражение1 , expr2

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

Примеры

найти / home -user joe

Найдите каждый файл в каталоге / доме, принадлежащем пользователю 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

Найти файлы с именемядро в каталоге или ниже каталога/ 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 часа, и любой остаток отбрасывается. Это означает, что для соответствия-mtime

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

находить . -перм 664

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

находить . -perm -664

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

находить . -perm / 222

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

находить . -перм / 220 находить . -perm / u + w, g + w находить . -perm / u = w, g = w

Все три команды выполняют одно и то же, но первое использует восьмеричное представление режима файла, а два других используют символическую форму. Эти команды выполняют поиск файлов, которые могут быть записаны либо их владельцем, либо их группой. Файлы не должны быть доступны для записи как владельцем, так и группой, которую нужно сопоставить; либо сделают.

находить . -perm -220 находить . -perm -g + w, u + w

Обе эти команды выполняют одно и то же; поиск файлов, которые могут быть записаны как их владельцем, так и их группой.

находить . -perm -444 -perm / 222! -перм / 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 соответственно)

Важный: Использовать человек команда ( % человек ), чтобы увидеть, как команда используется на вашем конкретном компьютере.