Използване на командите Linux и Unix: намерете

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

Синтаксис за намиране на командата:

намерете [път ...] [израз]

описание

Тази ръководна страница документира версията за намиране на GNU. Командата открива търсенето на кодовото дърво, което се корени на всяко дадено име на файл, като оценява дадения израз от ляво на дясно, съгласно правилата за предимство (вижте раздел "Оператори по-долу"), докато резултатът не бъде известен. с други думи, лявата страна е фалшива за и операции, вярно за или , в която точка намира движи към следващото име на файла.

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

се приема за началото на израза; всички аргументи преди това са пътища за търсене, а всички аргументи след него са останалият израз. Ако няма дадени пътища, се използва настоящата директория. Ако не е даден израз, изразът -print се използва.

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

изрази

Изразът се състои от опции (които засягат цялостната операция, а не обработката на конкретен файл и винаги върнат true), тестовете (които връщат истинска или невярна стойност) и действията (които имат странични ефекти и връщат истинска или фалшива стойност), всички отделени от операторите. Изразът - и се приема, когато операторът е пропуснат. Ако изразът не съдържа други действия освен " -чер" , тогава се извършва " отпечатък" върху всички файлове, за които изразът е вярен .

Настроики

Всички опции винаги се връщат вярно. Те винаги действат, вместо да се обработват само когато се достигне мястото им в израза. Ето защо, за яснота, най-добре е да ги поставите в началото на израза.

-daystart Измервайте пъти (за -amin, -atime, -cmin, -time, -mmin и -time ) от началото на днес, а не преди 24 часа.
-depth Обработвайте съдържанието на всяка директория преди самата директория.
-последвам Демонстрация символни връзки. Предполага - не .
-помагам или --помагам Отпечатайте резюме на използването на командния ред за намиране и излизане.
-maxdepth [число] Спускане на най-много нива (неотрицателно цяло число) на директории под аргументите на командния ред. Изразът -maxdepth 0 означава, че тестовете и действията се прилагат само към аргументите на командния ред.
-mindepth [число] Не прилагайте никакви тестове или действия на нива, по-малки от броя (неотрицателно цяло число). Изразът -mindepth 1 означава обработка на всички файлове, с изключение на аргументите на командния ред.
-mount Не спускайте директории на други файлови системи. Алтернативно име за -xdev , за съвместимост с някои други версии на Find .
-noleaf Не оптимизирайте, като приемете, че директорите съдържат по-малко поддиректории от техния брой на твърдите връзки. *
- версия или версия Отпечатайте номера на версията и намерете изход.
-xdev Не спускайте директории на други файлови системи.

* Тази опция е необходима при търсене на файлови системи, които не спазват конвенцията Unix директория-линк, като CD-ROM или MS-DOS файлови системи или точки за монтиране на AFS. Всяка директория на нормална Unix файлова система има поне 2 твърди линка: нейното име и нейната . (период) влизане. Освен това, неговите поддиректории (ако има такива) имат всеки елемент, свързан с тази директория.

Когато намира директория, след като е определила по-малко поддиректории от броя на връзките на директорията, знае, че останалите записи в директорията не са директории ( листови файлове в дървото на директориите). Ако е необходимо да бъдат разгледани само имената на файловете, няма нужда да ги разпознавате; това дава значително увеличение на скоростта на търсене.

Тестове

Числните аргументи могат да бъдат определени като:

+ п За по-голямо от n.
За по-малко от n.
п За точно n.
-amin n Последният файл бе достъпен преди минути.
-неже [файл] Последният достъп до файла е по-скоро, отколкото е променен файлът . -ефектът е засегнат от -последствие, само ако -последи се пред -ответно на командния ред.
-atime n Последният файл бе достъпен n * преди 24 часа.
-cmin n Последното състояние на файла е променено преди няколко минути.
-cnewer [файл] Най-скоро състоянието на файла е променено по-скоро, отколкото е променен файлът.
- cnewer е засегната от -след да се изпълни само ако -след последвано -cnewer на командния ред.
-ч.време Последният статус на файла е променен n * преди 24 часа.
-empty Файлът е празен и е обикновен файл или директория.
-false Винаги невярно.
-fstype [тип] Файлът е на файлова система от определен тип. Видовете валидни файлови системи варират между различните версии на Unix; непълният списък на типовете файлови системи, които са приети за някои версии на Unix или други, е: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Можете да използвате -printf с директивата% F, за да видите видовете файлови системи.
-Gid n ID на цифровата група на файла е n .
-група [име] Файлът принадлежи към групата gname (разрешено е номерът на идентификационната група).
- име [модел] Подобно на -iname, но мачът е нечувствителен към буквите.
-име [модел] Подобно на името, мачът е нечувствителен към буквите. Например, моделите за * и F? съвпадат с файловите имена Foo , FOO , foo , fOo и др.
-inum n Файлът има inode номер n .
-ipath [модел] Подобно на пътя, мачът е нечувствителен към буквите.
-режекс [модел] Подобно на -regex, мачът не е чувствителен към буквите.
-връзки n Файлът има n връзки.
-информация [модел] Файлът представлява символна връзка, чието съдържание съвпада с шаблона. Метахарактерите не лекуват / или . специално.
-mmin n Данните на файла бяха последно променени преди няколко минути.
-мм Данните на файла бяха последно променени n * преди 24 часа.
-name [модел] Базата на името на файла (пътят с водещите директории е премахнат) съответства на шаблона на обвивката. Метахаркраторите ( * , ? , И [] ) не съвпадат с a . в началото на базовото име. За да пренебрегнете директорията и файловете под нея, използвайте -prune ; вижте пример в описанието на пътя .
-newer [файл] Файлът бе променен по-скоро от файла . Изразът -newer е засегнат от -последствие, само ако -след следвано -newer на командния ред.
-nouser Никой потребител не отговаря на цифровия идентификационен номер на файла.
-nogroup Групата не съответства на идентификационния номер на номерата на файла.
-често [модел] Името на файла съвпада с модела на шаблона . Метахарактерите не лекуват / или . специално; така че, например, намерете. -path "./sr*sc ще отпечата запис за директория, наречена ./src/misc (ако има такава). За да пренебрегнете цялото дърво на директориите, използвайте -prune, вместо да проверявате всеки файл в дървото. Например, за да прескочите директорията src / emacs и всички файлове и директории под нея и да отпечатате имената на другите намерени файлове, направете нещо подобно: намерете. -path "./src/emacs '-prune -o -print
-perm [режим] Разрешаващите битове на файла са точно [режим] (октален или символен). Символните режими използват режим 0 като отправна точка.
-пермония Всички разрешени бита [режим] са зададени за файла.
-perm + режим Всеки от разрешенията битове [режим] са зададени за файла.
-regex [модел] Името на файла съвпада с модела на регулярния израз Това е съвпадение по целия път, а не търсене. Например, за да съответствате на файл, наречен ./fubar3, можете да използвате лентата с регулярен израз . *. или . * б. * 3 , но не б. * r3 .
-разпределение n [bckw] Файлът използва n единици пространство. Устройствата са по подразбиране блокове от 512 бита или ако b следват n , байтовете, ако c следват n , kilobytes, ако k следва n или 2 байт думи, ако w следва n . Размерът не включва индиректни блокове, но брои блокове в разпиляни файлове, които всъщност не са разпределени.
-вярно Винаги е вярно.
-type c Файлът е от тип c :
б Блокиран (буфериран) специален
° С Специален символ (небуфериран)
д указател
р Наименувана тръба (FIFO)
е Редовен файл
л Символична връзка
с гнездо
д (Solaris)
-uid n Номерът на потребителския идентификационен номер на файла е n .
-used n Файлът е бил достъпен за последен път в дни след последното му изменение.
-позволявам на потребителя Файлът е собственост на потребителя uname (позволено е номерът на идентификационния номер на потребителя).
-xtype c Същото като типа, освен ако файлът не е символична връзка. За символни връзки: ако -след не е дадено, вярно, ако файлът е връзка към файл от тип c ; ако е дадено, е вярно, ако c е l. С други думи, за символните връзки,
-xtype проверява вида на файла, който типът не проверява.

мерки

-exec команда ;

Изпълнение на командата ; true, ако се върне статус 0. Всички следващи аргументи за намиране се считат за аргументи на командата, докато аргумент, състоящ се от ";" се среща. Низът "{}" се заменя с текущото име на файл, което се обработва навсякъде, където се намира в аргументите на командата, а не само в аргументите, където е сама, както при някои версии на намиране . И двете конструкции може да се нуждаят от избягване (с "\") или цитирани, за да ги предпазят от разширяване от корпуса. Командата се изпълнява в стартовата директория.

-fls файл

Вярно; като -l, но пишете на файл като -fprint.

-fprint файл

Вярно; отпечатайте пълното име на файла в файловия файл . Ако файлът не съществува при намиране , той се създава; ако тя съществува, тя е съкратена. Имената на файловете "/ dev / stdout" и "/ dev / stderr" се обработват специално; те се отнасят съответно до стандартния изходен сигнал и стандартната грешка.

-fprint0 файл

Вярно; като -print0, но пишете на файл като -fprint.

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

Вярно; като -printf, но пишете на файл като -fprint.

команда ;

Подобно на -exec, но първо попитайте потребителя (на стандартния вход); ако отговорът не започва с "y" или "Y", не изпълнявайте командата и връщайте фалшива.

-print

Вярно; отпечатайте пълното име на файла на стандартния изход, последван от нов ред.

-print0

Вярно; отпечатайте пълното име на файла на стандартния изход, последван от нулев знак. Това позволява имената на файловете, които съдържат нови линии, да бъдат правилно интерпретирани от програми, които обработват резултата от намирането .

-printf формат

Вярно; формат за печат на стандартен изход, интерпретиране на директиви "\" и "%". Широчината и точността на полетата могат да се задават както при функцията "printf" C. За разлика от -print, -printf не добавя нов ред в края на низа. Избягванията и директивите са:

\ а

Аларма за звънене.

\ б

Backspace.

\° С

Спрете незабавно печат от този формат и измийте изхода.

\ е

Форма за захранване.

\ Н

Нова линия.

\ R

Предаване на карето.

\T

Хоризонтален раздел.

\ о

Вертикален раздел.

\\

Буквално наклонена черта ("\").

\ NNN

Знакът, чийто ASCII код е NNN (осмичен).

А знак "\", последван от всеки друг знак, се третира като обикновен знак, така че и двете се отпечатват.

%%

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

% на

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

% A k

Последното време за достъп на файла във формата, посочен от k , което е или `@ ', или директна за функцията C` strftime'. Възможните стойности за k са изброени по-долу; някои от тях може да не са налични на всички системи поради разликите в "strftime" между системите.

@

секунди от 1 януари 1970 г., 00:00 GMT.

Времеви полета:

Н

час (00..23)

аз

час (01..12)

к

час (0..23)

л

час (1..12)

М

минута (00..59)

р

AM или PM на местните власти

R

време, 12 часа (hh: mm: ss [AP] M)

С

втори (00..61)

T

време, 24 часа (hh: mm: ss)

х

локалното представяне на времето (H: M: S)

Z

(напр. EDT) или нищо, ако няма определена часова зона

Полета за дата:

а

локализираното съкратено име на седмицата (Sun..Sat)

А

локално име на седмицата, променлива дължина (неделя, събота)

б

локалното съкратено име на месеца (Jan..Dec)

B

локално име на пълния месец, променлива дължина (януари - декември)

° С

дата и час на локализацията (Sat Nov 04 12:02:33 EST 1989)

д

ден от месеца (01..31)

д

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

з

същите като b

к

ден от годината (001..366)

m

месец (01..12)

U

седмица номер на годината с неделя като първи ден от седмицата (00..53)

w

ден от седмицата (0..6)

W

седмица номер на годината с понеделник като първи ден от седмицата (00..53)

х

представяне на локалната дата (мм / дд / гг)

ш

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

Y

година (1970 ...)

б%

Размер на файла в блокове от 512 байта (закръглени нагоре).

%° С

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

% C k

Последното време за промяна на статуса на файла във формата, определен от k , което е същото като за% A.

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

% е

Името на файла с премахнати водещи директории (само последния елемент).

% F

Тип на файловата система, в която файлът е включен; тази стойност може да се използва за -ftype.

% г

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

% G

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

% з

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

% Н

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

% и

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

% к

Размер на файла в 1K блокове (закръглена нагоре).

% L

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

% т

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

% п

Брой твърди връзки към файл.

% р

Името на файла.

% P

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

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

%T

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

% T k

Последното време за промяна на файла във формата, определен от k , което е същото като за% A.

% ф

Потребителското име на файла или цифров идентификационен номер на потребителя, ако потребителят няма име.

% U

Номерът на потребителския идентификатор на файла.

Знакът "%", последван от друг знак, се отхвърля (но се отпечатва и другият знак).

-prune

Ако -да не е дадено, вярно; не спускайте текущата директория.
Ако е дадена -дефт, фалшива; без ефект.

-ls

Вярно; списък на текущия файл в "ls -dils" формат на стандартен изход. Брой блокове са от 1K блокове, освен ако не е зададена променливата POSIXLY_CORRECT за околната среда, в който случай се използват блокове от 512 байта.

Операторите

Посочени в низходящ ред:

( expr )

Принудително предимство.

! ИЗРАЗът

Вярно, ако expr е невярно.

- не изрично

Същото като ! изчер .

expr1 expr2

И (подразбиращи се); expr2 не се оценява, ако expr1 е невярно.

expr1- a expr2

Същото като expr1 expr2 .

expr1 - и expr2

Същото като expr1 expr2 .

expr1 -o expr2

Или; expr2 не се оценява, ако expr1 е вярно.

expr1 - или expr2

Същото като expr1 -o expr2 .

expr1 , expr2

Списък; и двата expr1 и expr2 винаги се оценяват. Стойността на expr1 се изхвърля; стойността на списъка е стойността на expr2 .

Примери

намерете / home-user joe

Намерете всеки файл под директорията / дома, собственост на потребителя joe.

намерете / usr -name * stat

Намерете всеки файл под директорията / usr, завършваща с ".stat".

намерете / var / spool -mtime +60

Намерете всеки файл под директорията / var / spool, който е бил променен преди повече от 60 дни.

find / tmp - име ядро-тип f -print | xargs / bin / rm -f

Намерете файлове с име в или под директория / tmp и ги изтрийте. Имайте предвид, че това ще работи неправилно, ако има имена на файлове, съдържащи нови линии, единични или двойни кавички или интервали.

find / tmp - име ядро ​​- тип f -print0 | xargs -0 / bin / rm -f

Намерете файлове с име в или под директория / tmp и ги изтрийте, обработвайки имена на файлове по такъв начин, че имената на файловете или директорията, съдържащи единични или двойни кавички, интервали или нови линии, се обработват правилно. Тестът -name идва преди теста на типа , за да се избегне да се налага да се извиква stat (2) във всеки файл.

намирам . -type f -exec файл '{}' \;

Изпълнява файла на всеки файл в или под текущата директория. Забележете, че скобите са приложени в единични цитати, за да ги защитите от интерпретацията като интерпретации на скрипт на shell. Точката на точка и запетая също е защитена чрез използването на обратна наклонена черта, макар че ";" би могло да се използва и в този случай.

намерете / \ (-перм -4000 -fprintf /root/suid.txt '% # m% u% p \ n' \), \\ (-size + 100M -fprintf /root/big.txt '% -10s% p \ n '\)

Прехвърлете файловата система само веднъж, като изведете зададените файлове и директории в /root/suid.txt и големите файлове в /root/big.txt .

намерете $ HOME - време 0

Потърсете файлове в домашната си директория, които са променени през последните двадесет и четири часа. Тази команда работи по този начин, защото времето от последното модифициране на всеки файл е разделено на 24 часа, а останалите се отхвърлят. Това означава, че за да се съчетае -мреме

0 , файлът ще трябва да има промяна в миналото, която е по-малко от 24 часа.

намирам . -перпер 664

Търсете файлове, които имат разрешение за четене и писане за техния собственик и група, но кои други потребители могат да четат, но не пишат. Файловете, които отговарят на тези критерии, но имат други разрешени бита (например ако някой може да изпълни файла) няма да бъдат съпоставени.

намирам . -пермон -664

Потърсете файлове, които имат разрешение за четене и писане за техния собственик и група, и кои други потребители могат да четат, без да се съобразява с наличието на каквито и да било допълнителни разрешителни битове (например изпълнимия бит). Това ще съвпадне с файл, който има например режим 0777.

намирам . -пермон / 222

Търсете файлове, които могат да се пишат от някой (собственик или група или някой друг).

намирам . -perm / 220 намиране. -perm / u + w, g + w намиране. -перм / u = w, g = w

И трите от тези команди правят същото, но първата използва осмото представяне на файловия режим, а другите две използват символичната форма. Тези команди всички търсене на файлове, които могат да се пишат от собственика или групата им. Файловете не трябва да могат да се пишат както от собственика, така и от групата, която трябва да се съчетае; или ще го направя.

намирам . -perm -220 намерите. -пермон -g + w, u + w

И двете тези команди правят същото; търсене на файлове, които могат да се пишат от собственика и групата им.

намирам . -пермон -444 -перм / 222! -perm / 111 намиране. -perm -a + r -перм / а + w! -перм / а + х

Тези две команди, както търсене на файлове, които могат да се четат за всички (-perm -444 или -perm -a + r), имат най-малко за написване на бита (-perm / 222 или -perm / a + w), но не са изпълними за всеки (! -перм / 111 и l-перм / а + х съответно)

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