Použitie príkazov Linux a Unix: nájsť

Príkaz Linux a Unix nájde vykonanie vyhľadávania súborov v hierarchii adresárov.

Syntax pre príkaz find :

nájsť [path ...] [expression]

popis

Táto stránka manuálu dokumentuje GNU verziu vyhľadávania . Príkaz nájde vyhľadávanie stromu adresárov zakorenené na každom danom názve súboru vyhodnotením daného výrazu zľava doprava podľa pravidiel prednosti (pozri časť Operátory nižšie), kým nie je známy výsledok; inými slovami, ľavá strana je falošná pre operácie, pravdivé pre, alebo v ktorom bode nájde presun na ďalší názov súboru.

Prvý argument začína:

je považovaný za začiatok výrazu; všetky argumenty pred ním sú cesty k hľadaniu a akékoľvek argumenty po ňom sú zvyšok výrazu. Ak nie sú uvedené žiadne cesty, použije sa aktuálny adresár. Ak nie je uvedený žiadny výraz, použije sa výraz -print .

Príkaz find nájde stav 0, ak sú všetky súbory úspešne spracované, väčšie ako 0, ak sa vyskytnú chyby.

výrazov

Výraz je tvorený voľbami (ktoré ovplyvňujú celkovú operáciu namiesto spracovania konkrétneho súboru a vždy vrátia true), testy (ktoré vrátia pravú alebo falošnú hodnotu) a akcie (ktoré majú vedľajšie účinky a vrátia pravdivú alebo falošná hodnota), všetky oddelené prevádzkovateľmi. Výraz - a predpokladá sa, že operátor je vynechaný. Ak výraz neobsahuje žiadne iné než -prune akcie , potom sa -print vykoná na všetkých súboroch, pre ktoré je tento výraz pravdivý.

možnosti

Všetky možnosti sa vždy vrátia. Vždy nadobúdajú účinnosť, skôr než sa spracúvajú iba vtedy, keď sa dosiahne ich miesto vo vyjadrení. Z dôvodu jasnosti je preto najlepšie umiestniť ich na začiatok výrazu.

-daystart Merať časy (pre -amin, -atime, -cmin, -time, -mmin a -mtime ) od začiatku dneška skôr ako pred 24 hodinami.
-depth Spracujte obsah každého adresára pred samotným adresárom.
-follow Odporučiť symbolické odkazy. Znamená to - nepovolené .
-help alebo --help Vytlačte súhrnné informácie o použití príkazového riadku nájsť a ukončiť.
-maxdepth [číslo] Zostupujte na väčšinu počtu úrovní (negatívne celé číslo) adresárov pod argumentmi príkazového riadku. Výraz -maxdepth 0 znamená použiť iba testy a akcie na argumenty príkazového riadku.
-mindepth [počet] Nepoužívajte žiadne testy alebo akcie na úrovni nižšej ako je počet (ne záporné celé číslo). Výraz -mindepth 1 znamená spracovanie všetkých súborov okrem argumentov príkazového riadku.
-Montážní Adresáre neskartujte na iných súborových systémoch. Alternatívny názov -xdev , pre kompatibilitu s niektorými inými verziami vyhľadávania .
-noleaf Nepoužívajte optimalizáciu predpokladať, že adresáre obsahujú menej subdirektorov než ich počet pevných odkazov. *
-version alebo -version Vytlačte číslo verzie vyhľadávania a skončte.
-xdev Adresáre neskartujte na iných súborových systémoch.

* Táto možnosť je potrebná pri vyhľadávaní súborových systémov, ktoré nedodržiavajú konvenciu Unix adresár-link, ako sú súborové systémy CD-ROM alebo MS-DOS alebo body pripojenia zväzku AFS. Každý adresár na bežnom Unixovom súborovom systéme má najmenej 2 tvrdé odkazy: jeho názov a jeho . (obdobie). Navyše, jeho podadresáre (ak existujú) majú navyše položku ... prepojenú s týmto adresárom.

Keď vyhľadávací adresár skúma adresár, potom, čo zadal dva menšie podadresáre než počet odkazov v adresári, vie, že ostatné položky v adresári nie sú adresári (súbory listov v adresári). Ak je potrebné preskúmať len názvy súborov, nie je potrebné ich oznamovať; to znamená výrazné zvýšenie rýchlosti vyhľadávania.

skúšky

Číselné argumenty je možné špecifikovať ako:

+ n Pre viac ako n.
-n Pre menej ako n.
n Presne pre n.
amin Súbor bol naposledy sprístupnený pred minútami.
-anwer [súbor] Súbor bol naposledy sprístupnený neskôr, ako bol súbor upravený. -anwer je ovplyvnený -sledovať len vtedy, keď-nasleduje pred príchodom na príkazovom riadku.
-atime n Súbor bol naposledy prístupný n * pred 24 hodinami.
-cmin n Stav súboru bol naposledy zmenený pred minútami.
-cnewer [súbor] Stav súboru bol naposledy zmenený neskôr, ako bol súbor upravený.
- cnewer je ovplyvnený -sledovať iba vtedy, keď -prebieha pred- cnewer na príkazovom riadku.
-čas n Stav súboru bol naposledy zmenený n * pred 24 hodinami.
-empty Súbor je prázdny a je buď bežný súbor alebo adresár.
-false Vždy nepravdivé.
-fstype [typ] Súbor je na súborovom systéme určeného typu. Platné typy súborových systémov sa líšia v rôznych verziách systému Unix. neúplný zoznam typov súborových systémov, ktoré sú akceptované v niektorých verziách Unixu alebo inej, je: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Pomocou príkazu -printf môžete pomocou smernice% F zobraziť typy súborových systémov.
-gid n ID číselnej skupiny súboru je n .
-group [gname] Súbor patrí do skupiny gname (povolená číselná skupina).
-love [vzor] Rovnako ako -iname, ale zápas nie je citlivý na veľké a malé písmená.
-iname [vzor] Rovnako ako -name , ale pri zápise nie sú citlivé na veľké a malé písmená. Napríklad vzory fo * a F? zodpovedajú názvom súborov Foo , FOO , foo , fOo atď.
-inum n Súbor má inode číslo n .
-path [vzor] Rovnako ako - cesta , ale zápas nie je citlivý na veľkosť písmen.
-regex [vzor] Rovnako ako -regex, ale zápas nie je citlivý na veľké a malé písmená.
-links n Súbor má n odkazov.
-informovať [vzor] Súbor je symbolický odkaz, ktorého obsah zodpovedá vzoru škrupiny. Metacharactery nešetria / alebo . zvlášť.
-mmin n Údaje súborov boli naposledy zmenené pred minútami.
-mtime n Údaje súboru boli naposledy zmenené n * pred 24 hodinami.
-name [vzor] Základ názvu súboru (cesta s vedúcimi adresármi odstránená) zodpovedá vzoru škrupiny. Metaznaky ( * , ? , A [] ) sa nezhodujú s a . na začiatku základného názvu. Ak chcete ignorovať adresár a súbory pod ním, použite -prune ; pozrite si príklad v popise cesty .
-newer [súbor] Súbor bol zmenený neskôr ako súbor . Výraz -newer je ovplyvnený -sledovať iba vtedy, keď -prebieha pred -newer na príkazovom riadku.
-nouser Žiadny používateľ nezodpovedá číselnému používateľskému ID súboru.
-nogroup Žiadna skupina nezodpovedá ID číselnej skupiny súboru.
-spôsob [vzor] Názov súboru sa zhoduje so vzorom vzorov škrupín. Metacharactery nešetria / alebo . špeciálne; Nájdete to napríklad. -path "./sr*sc vytlačí záznam pre adresár s názvom ./src/misc (ak existuje). Ak chcete ignorovať celý strom adresárov, použite -prune skôr ako skontrolovať každý súbor v strome. Napríklad, ak chcete preskočiť adresár src / emacs a všetky súbory a adresáre pod ním a vytlačiť názvy ďalších nájdených súborov, urobte niečo takéto: nájsť. -path "./src/emacs '-prune -o -print
-perm [režim] Súbory oprávnenia súboru sú presne [režim] (osmičkové alebo symbolické). Symbolické režimy používajú režim 0 ako miesto odchodu.
-perm-mode Pre súbor sú nastavené všetky bity povolenia [režim] .
-perm + režim Pre súbor je nastavený ktorýkoľvek z oprávnení bity [režim] .
-regex [pattern] Názov súboru zodpovedá vzoru regulárneho výrazu. Toto je zhoda na celej ceste, nie hľadanie. Napríklad, aby sa zhodoval súbor s názvom ./fubar3, môžete použiť regulárny výraz . * Bar. alebo . * b. * 3 , ale nie b. * r3 .
-size n [bckw] Súbor používa n jednotiek priestoru. Jednotky majú štandardne 512 bajtových blokov alebo ak b nasleduje n bajty, ak c nasleduje n , kilobytes, ak k nasleduje n , alebo 2 bajtové slová, ak w nasleduje n . Veľkosť nezahŕňa nepriame bloky, ale počet blokov v riedke súbory, ktoré nie sú skutočne priradené.
-true Vždy pravda.
-typ c Súbor je typu c :
b Zablokovanie (rezervované) špeciálne
C Znak (nebuffered) špeciálny
d adresár
p Pomenované potrubie (FIFO)
F Pravidelný súbor
l Symbolický odkaz
s zásuvka
D dvere (Solaris)
-uid n Číselné ID používateľa súboru je n .
-used n Súbor bol naposledy sprístupnený n dní po jeho poslednom zmene stavu.
-user uname Súbor je vo vlastníctve používateľa uname (povolené číselné používateľské ID).
-xtype c Rovnaký ako -typ, pokiaľ súbor nie je symbolický odkaz. Pre symbolické prepojenia: ak -sledne nebolo zadané, platí, ak je súbor odkazom na súbor typu c ; ak je zadané nasledovné, true, ak c je l. Inými slovami, pre symbolické väzby,
-xtype skontroluje typ súboru, ktorý typ nekontroluje.

Akcia

príkaz -exec;

Spustiť príkaz ; true, ak je vrátený stav 0. Nasledujúce argumenty, ktoré sa majú nájsť, sa považujú za argumenty pre príkaz, kým argument, ktorý sa skladá z ";" sa vyskytuje. Reťazec `{} 'sa nahradí aktuálnym názvom súboru, ktorý sa spracováva všade, kde sa vyskytuje v argumentoch príkazu, a to nielen v argumentoch, kde je sám, ako v niektorých verziách nájdu . Obidva tieto konštrukcie môžu byť potrebné uniknúť (pomocou `\ ') alebo citované, aby ich chránili pred expanziou pomocou shell. Príkaz sa vykoná v počiatočnom adresári.

-fls súboru

pravda; ako -l, ale napíše do súboru ako -fprint.

-fprint súbor

pravda; vytlačiť celý súbor do súboru . Ak súbor pri spustení nájde neexistuje, vytvorí sa; ak existuje, je skrátená. Názvy súborov `` / dev / stdout '' a `` dev / stderr '' sa spracúvajú špeciálne; vzťahujú sa na štandardný výstup a výstup štandardnej chyby.

-fprint0 súboru

pravda; ako -print0, ale napíše do súboru ako -fprint.

-fprintf formát súboru

pravda; ako -printf, ale napíše do súboru ako -fprint.

príkaz -ok;

Rovnako ako -exec, ale spýtajte sa najprv používateľa (na štandardnom vstupe); ak odpoveď nezačína s "y" alebo "Y", nespúšťajte príkaz a nevráťte nepravdivé.

-print

pravda; vytlačte celý názov súboru na štandardnom výstupe, za ktorým nasleduje nový riadok.

-print0

pravda; vytlačte celý názov súboru na štandardnom výstupe a nasleduje nulový znak. To umožňuje, aby názvy súborov, ktoré obsahujú nové riadky, boli správne interpretované programami, ktoré spracúvajú výstup vyhľadávania.

-printf formát

pravda; formát tlače na štandardnom výstupe, interpretácia smerníc `\ 'escapes a`%'. Šírky a presné polia je možné špecifikovať ako pri funkcii `printf 'C. Na rozdiel od -print, -printf nepridá nový riadok na konci reťazca. Úniky a smernice sú:

\ a

Budík zvonček.

\ b

Backspace.

\ c

Zastavte okamžite tlač z tohto formátu a vyplachujte výstup.

\ f

Form feed.

\ n

Nový riadok.

\ r

Prepravný doklad.

\ t

Horizontálna karta.

\ v

Vertikálna karta.

\\

Doslovné lomítko (`\ ').

\ NNN

Znak, ktorého ASCII kód ​​je NNN (osmičkový).

Znak "` ", za ktorým nasleduje akýkoľvek iný znak, sa považuje za obyčajný znak, takže sú oboje vytlačené.

%%

Doslovné percento znamenie.

% A

Posledný čas prístupu súboru vo formáte vrátenom funkciou C `ctime '.

% A k

Posledný čas prístupu súboru vo formáte určenom k , ktorý je buď `@ ', alebo direktívu pre funkciu C` strftime'. Možné hodnoty pre k sú uvedené nižšie; niektoré z nich nemusia byť dostupné vo všetkých systémoch kvôli rozdielom v systéme "strftime" medzi systémami.

@

sekúnd od 1. januára 1970, 00:00 GMT.

Časové polia:

H

hodina (00..23)

ja

hodina (01..12)

k

hodina (0..23)

l

hodina (1..12)

M

minúta (00..59)

p

AM alebo PM miestneho prostredia

r

čas, 12 hodín (hh: mm: ss [AP] M)

S

druhý (00..61)

T

čas, 24 hodín (hh: mm: ss)

X

časové zastúpenie lokality (H: M: S)

Z

časové pásmo (napr. EDT), alebo nič, ak nie je možné určiť časové pásmo

Polia dátumu:

miestny skrátený názov dňa v týždni (Sun..Sat)

miestne názov celého dňa, variabilná dĺžka (nedeľa, sobota)

b

miestny skrátený názov mesiaca (Jan..Dec)

B

miestny názov plného mena, premenná dĺžka (január, december)

C

dátum a čas lokality (So Nov 04 12:02:33 EST 1989)

d

deň v mesiaci (01..31)

D

dátum (mm / dd / rr)

hod

rovnaké ako b

j

deň v roku (001..366)

m

mesiac (01..12)

U

týždeň číslo roku s nedeľou ako prvý deň v týždni (00..53)

w

deň v týždni (0..6)

W

týždeň číslo roka s pondelkom ako prvý deň v týždni (00..53)

X

reprezentácia dátumu lokality (mm / dd / rr)

y

posledné dve číslice roku (00..99)

Y

rok (1970 ...)

% b

Veľkosť súboru v blokoch s veľkosťou 512 bajtov (zaokrúhlené nahor).

% c

Posledný čas zmeny stavu súboru vo formáte vrátenom funkciou C `ctime '.

% C k

Posledný čas zmeny stavu súboru vo formáte určenom k , ktorý je rovnaký ako pri% A.

% d

Hĺbka súboru v adresári; 0 znamená, že súbor je argument príkazového riadku.

% f

Názov súboru s odstránenými vedúcimi adresármi (iba posledný prvok).

% F

Typ súborového systému, na ktorom je súbor zapnutý; táto hodnota sa môže použiť pre -ftype.

% g

Názov skupiny súborov alebo identifikátor číselnej skupiny, ak nemá skupina žiadny názov.

% G

ID číselnej skupiny súboru.

% h

Vedúce adresáre názvu súboru (všetky okrem posledného prvku).

% H

Argument príkazového riadku, pod ktorým bol nájdený súbor.

% i

Číslo súboru inode (v desatinnom čísle).

% k

Veľkosť súboru v blokoch 1K (zaokrúhlené nahor).

% l

Objekt symbolického odkazu (prázdny reťazec, ak súbor nie je symbolický odkaz).

% m

Súbory povolenia bitov (v osmičke).

% n

Počet pevných odkazov na súbor.

% p

Názov súboru.

% P

Názov súboru s názvom argumentu príkazového riadku, pod ktorým bol odstránený.

% s

Veľkosť súboru v bajtoch.

% t

Posledný čas úpravy súboru vo formáte vrátenom funkciou C `ctime '.

% T k

Posledný čas úpravy súboru vo formáte určenom k , ktorý je rovnaký ako pre% A.

% u

Používateľské meno súboru alebo číselné používateľské ID, ak používateľ nemá žiadne meno.

% U

Číslo číselného súboru súboru.

Znak "%", za ktorým nasleduje iný znak, sa vylúči (ale vytlačí sa druhý znak).

-prune

Ak -depth nie je daná, pravda; neklesajúci aktuálny adresár.
Ak je zadaná - falošná; bez efektu.

-Je

pravda; zoznam aktuálneho súboru vo formáte `ls -dils 'na štandardnom výstupe. Počet blokov je 1K blokov, pokiaľ nie je nastavená premenná prostredia POSIXLY_CORRECT, v takom prípade sa použijú bloky s veľkosťou 512 bajtov.

operátori

Zoradené v poradí klesajúcich priorít:

( expr )

Prednosť sily.

! expr

Pravda, ak je expr falošné.

-expres

Rovnaké ako ! expr .

expr1 expr2

A (implicitne); expr2 sa nehodnotí, ak expr1 je falošný.

expr1-a expr2

Rovnaké ako expr1 expr2 .

expr1 - a expr2

Rovnaké ako expr1 expr2 .

expr1 -o expr2

alebo; expr2 sa nehodnotí, ak je expr1 pravdivá.

expr1 - alebo expr2

Rovnaké ako expr1 -o expr2 .

expr1 , expr2

Zoznam povolených; ako expr1, tak expr2 sa vždy hodnotí. Hodnota expr1 sa vyradí; hodnota zoznamu je hodnota expr2 .

Príklady

nájsť / home-user joe

Nájdite každý súbor v adresári / doméne, ktorý vlastní používateľ joe.

nájsť / usr -name * stat

Nájdite každý súbor pod adresárom / usr končiac v ".stat".

nájsť / var / spool -mtime +60

Nájdite každý súbor pod adresárom / var / spool, ktorý bol upravený pred viac ako 60 dňami.

nájsť / tmp -name core -type f -print | xargs / bin / rm -f

Vyhľadajte súbory s názvom jadro v alebo pod adresárom / tmp a odstráňte ich. Všimnite si, že to bude fungovať nesprávne, ak existujú názvy súborov obsahujúce nové riadky, jednoduché alebo dvojité úvodzovky alebo medzery.

nájsť / tmp -name core -type f -print0 | xargs -0 / bin / rm -f

Nájdite súbory s názvom jadro v alebo pod adresárom / tmp a odstráňte ich, spracovanie názvov súborov takým spôsobom, aby názvy súborov alebo adresárov obsahujúce jednoduché alebo dvojité úvodzovky, medzery alebo nové riadky boli správne spracované. Test typu -name prichádza pred testom typu, aby sa zabránilo tomu, že budete musieť vo všetkých súboroch volať stat (2) .

Nájsť . súbor typu f-exec '{}' \;

Spustí súbor v každom súbore v aktuálnom adresári alebo pod ním. Všimnite si, že závorky sú uzavreté v jednoduchých úvodzovkách, aby ich chránili pred interpretáciou ako interpunkcia skriptu pre shell. Bodkočiarka je podobne chránená použitím spätného lomka, hoci ';' v tomto prípade mohli byť použité.

nájsť / \ (-perm -4000 -fprintf /root/suid.txt '% # m% u% p \ n' \), \ \ (-size + 100M -fprintf /root/big.txt '% -10s% p \ n '\)

Prejdite súborový systém len raz, zoznam súborov a adresárov súborov setuid do /root/suid.txt a veľkých súborov do /root/big.txt .

nájsť $ HOME -time 0

Vyhľadajte súbory vo vašom domovskom adresári, ktoré boli upravené za posledných dvadsaťštyri hodín. Tento príkaz pracuje týmto spôsobom, pretože čas posledného modifikácie každého súboru je rozdelený na 24 hodín a zvyšok sa vyradí. To znamená, že sa zhoduje s -mtime

0 , súbor bude musieť mať v minulosti úpravu, ktorá je pred menej ako 24 hodinami.

Nájsť . -perm 664

Vyhľadajte súbory, ktoré majú oprávnenie na čítanie a písanie pre vlastníka a skupinu, ale ostatní používatelia môžu čítať, ale nepíšu. Súbory, ktoré spĺňajú tieto kritériá, ale majú iné nastavené bity oprávnení (napríklad ak niekto môže spustiť súbor) sa nebudú zhodovať.

Nájsť . -perm -664

Vyhľadajte súbory, ktoré majú oprávnenie na čítanie a zápis vlastníka a skupiny a ktoré ostatní používatelia dokážu čítať, bez ohľadu na prítomnosť akýchkoľvek bitov navyše povolených (napríklad spustiteľný bit). To sa zhoduje so súborom, ktorý má napríklad režim 0777.

Nájsť . -perm / 222

Vyhľadajte súbory, ktoré je možné zapisovať niekto (ich vlastník, ich skupina alebo niekto iný).

Nájsť . -perm / 220 nájsť. -perm / u + w, g + w nájsť. -perm / u = w, g = w

Všetky tri príkazy robia to isté, ale prvá používa osmičkové znázornenie režimu súborov a ostatné dva používajú symbolický tvar. Tieto príkazy vyhľadávajú všetky súbory, ktoré sú zapisovateľné buď vlastníkom alebo ich skupinou. Súbory nemusia byť zapisovateľné ako vlastníkom, tak aj skupinou, ktorá sa má zhodovať. buď to urobí.

Nájsť . -perm -220 nájsť. -perm -g + w, u + w

Obidva tieto príkazy robia to isté; hľadať súbory, ktoré sú zapisovateľné ako vlastníkom, tak ich skupinou.

Nájsť . -perm -444 -perm / 222! -perm / 111 nájsť. -perm -a + r -perm / a + w! -perm / a + x

Tieto dva príkazy vyhľadávajú súbory, ktoré sú čitateľné pre každého (-perm -444 alebo -perm -a + r), majú aspoň nastavený bit pre zápis (-perm / 222 alebo -perm / a + w), ale nie sú spustiteľné pre každého (! -perm / 111 a / -perm / a + x)

Dôležité: Pomocou príkazu man ( % man ) môžete zistiť, ako sa príkaz používa vo vašom konkrétnom počítači.