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