Použití příkazu Linux a Unix: find

Příkaz Linux a Unix nalezne spuštění hledání souborů v adresářové hierarchii.

Syntaxe příkazu find :

najít [cesta ...] [výraz]

Popis

Tato manuálová stránka dokumentuje verzi vyhledávání GNU. Příkaz vyhledá adresářový strom zakořeněný u každého daného názvu souboru vyhodnocením daného výrazu zleva doprava podle pravidel přednosti (viz část Operátory níže), dokud není znám výsledek; jinými slovy, levá strana je falešná a operace, pravdivé pro, nebo v jakém bodě najdeme přesun na další název souboru.

První argument, který začíná:

je považován za začátek výrazu; všechny argumenty před tím, než jsou cesty k vyhledávání, a všechny argumenty po něm jsou zbytek výrazu. Pokud nejsou zadány žádné cesty, použije se aktuální adresář. Není-li zadán žádný výraz, použije se výraz -print .

Příkaz find se ukončí se stavem 0, pokud jsou všechny soubory úspěšně zpracovány, větší než 0, pokud dojde k chybě.

Výrazy

Výraz je tvořen možnostmi (které ovlivňují celkovou operaci spíše než zpracování konkrétního souboru a vždy vrátí true), testy (které vracejí hodnotu true nebo false) a akce (které mají vedlejší účinky a vrátí pravdivý nebo falešná hodnota), všechny oddělené operátory. Výraz - a předpokládá se, že operátor je vynechán. Pokud výraz neobsahuje žádné jiné akce než -prune , pak se -print provádí na všech souborech, pro které je výraz true.

Možnosti

Všechny možnosti se vždy vrátí na hodnotu true. Vždy se projevují, spíše než se zpracovávají pouze tehdy, když dosáhnou svého místa ve výrazu. Z důvodu jasnosti je proto nejlepší umístit je na začátku výrazu.

-daystart Změřte časy (pro -amin, -atime, -cmin, -time, -mmin a -mtime ) od začátku dneška spíše než před 24 hodinami.
-hloubka Zpracujte obsah každého adresáře před samotným adresářem.
-následovat Dereference symbolické odkazy. Předpokládá - nepovolí .
-help nebo --help Vytiskněte shrnutí použití příkazového řádku pro hledání a ukončení.
-maxdepth [číslo] Snižte počet nejvyšších úrovní (ne záporné celé číslo) adresářů pod parametry příkazového řádku. Výraz -maxdepth 0 znamená použít pouze testy a akce na argumenty příkazového řádku.
-mindepth [počet] Nepoužívejte žádné testy nebo akce na úrovni nižší než je počet (ne záporné celé číslo). Výraz -mindepth 1 znamená zpracování všech souborů kromě argumentů příkazového řádku.
-mount Necházejte adresáře v jiných souborových systémech. Alternativní název pro -xdev pro kompatibilitu s některými dalšími verzemi hledání .
-Noleaf Nepoužívejte optimalizaci, pokud předpokládáte, že adresáře obsahují méně podadresářů než jejich pevný počet odkazů. *
-version nebo -version Vytiskněte číslo verze a vyhledejte .
-xdev Necházejte adresáře v jiných souborových systémech.

* Tato volba je potřebná při hledání souborových systémů, které nesplňují konvenci Unix adresář-link, jako jsou souborové systémy CD-ROM nebo MS-DOS nebo body připojení AFS. Každý adresář v normálním Unixovém souborovém systému má alespoň 2 pevné odkazy: jeho jméno a jeho . (období). Navíc, jeho podadresáře (pokud nějaké) mají každý položku .. spojený s tímto adresářem.

Když vyhledává adresář, který po zadání více podadresářů než počet odkazů v adresáři určil, ví, že ostatní položky v adresáři jsou ne-adresáře (soubory listů ve stromu adresářů). Pokud je třeba prozkoumat pouze názvy souborů, není třeba je ukládat; což vede k výraznému zvýšení rychlosti vyhledávání.

Testy

Číselné argumenty lze zadat jako:

+ n Pro větší než n.
-n Pro méně než n.
n Přesně tak .
amin Soubor byl naposledy zpřístupněn před několika minutami.
-anwer [soubor] Soubor byl naposledy přístupný dříve, než byl soubor změněn. -anastavení je ovlivněno -sledovat pouze v případě, že -přijde-předchází -anwer na příkazovém řádku.
-atime n Soubor byl naposledy přístupný * před 24 hodinami.
-cmin n Stav souboru byl naposledy změněn před minutami.
-cnewer [soubor] Stav souboru byl naposledy změněn později, než byl soubor změněn.
- cnewer je ovlivněn -sledovat pouze v případě, že -průsledkem je před- cnewer na příkazovém řádku.
-čas n Stav souboru byl naposledy změněn n * před 24 hodinami.
-prázdný Soubor je prázdný a je buď běžným souborem nebo adresářem.
-Nepravdivé Vždy nepravdivé.
-fstype [typ] Soubor je na souborovém systému zadaného typu. Platné typy souborových systémů se liší mezi různými verzemi systému Unix; neúplný seznam typů souborových systémů, které jsou přijaty u některé verze systému Unix nebo jiné, je: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Můžete použít -printf s direktivou% F pro zobrazení typů vašich souborových systémů.
-gid n ID číselné skupiny souboru je n .
-group [gname] Soubor patří do skupiny gname (povolená číselná skupina).
-ilname [vzor] Stejně jako -iname, ale zápas není citlivý na velikost písmen.
-iname [vzor] Stejně jako -name , ale zápas není citlivý na velikost písmen. Například vzory pro * a F? odpovídají názvy souborů Foo , FOO , foo , fOo atd.
-inum n Soubor má inode číslo n .
-path [vzor] Stejně jako -path , ale zápas není citlivý na velikost písmen.
-regex [vzor] Stejně jako -regex, ale zápas není citlivý na velikost písmen.
-links n Soubor má n odkazy.
-informujte [vzor] Soubor je symbolický odkaz, jehož obsah odpovídá vzoru obalu. Metacharactery nešetří / . speciálně.
-mmin n Údaje souboru byly naposledy změněny před několika minutami.
-mtime n Údaje souboru byly naposledy změněny n * před 24 hodinami.
-name [vzor] Základ názvu souboru (cesta s hlavními odstraněnými adresáři) odpovídá vzoru obálky. Metaznaky ( * , ? , A [] ) neodpovídají a . na začátku názvu základny. Chcete-li ignorovat adresář a soubory pod ním, použijte -prune ; viz příklad v popisu cesty.
-newer [soubor] Soubor byl později upraven jako soubor . Výraz -newer je ovlivněn -sledovat pouze v případě, že -průsledkem je -newer na příkazovém řádku.
-nouser Žádný uživatel neodpovídá numerickému ID uživatele.
-group Žádná skupina neodpovídá ID číselné skupiny souboru.
-path [vzor] Název souboru odpovídá vzoru vzoru . Metacharactery nešetří / . speciálně; tak například najít. -path "./sr*sc vytiskne položku pro adresář nazvaný ./src/misc (pokud existuje). Chcete-li ignorovat celý adresářový strom, použijte -prune, nikoli kontrolovat každý soubor ve stromu. Chcete-li například přeskočit adresář src / emacs a všechny soubory a adresáře pod ním a vytisknout názvy ostatních nalezených souborů, proveďte něco podobného: find. -path './src/emacs' -prune -o -print
-perm [režim] Soubory oprávnění souboru jsou přesně [režim] (osmičkový nebo symbolický). Symbolické režimy používají režim 0 jako výchozí bod.
-perm -mode Pro tento soubor jsou nastaveny všechny bity oprávnění [režim] .
-perm + režim Pro soubor je nastaven libovolný z bitů oprávnění [režim] .
-regex [vzor] Název souboru odpovídá vzoru pravidelného výrazu. Toto je shoda na celé cestě, nikoli hledání. Chcete-li například odpovídat souboru s názvem ./fubar3, můžete použít regulární výraz . * Bar. nebo . * b. * 3 , ale ne b. * r3 .
-size n [bckw] Soubor používá n jednotek prostoru. Jednotky jsou ve výchozím nastavení bloky o velikosti 512 bajtů, nebo b je-li b n , bajty, pokud c následuje n , kilobytes, pokud k použije n nebo 2bajtová slova, pokud w následuje n . Velikost nezahrnuje nepřímé bloky, ale počítají bloky v řídkých souborech, které nejsou skutečně přiděleny.
-skutečný Vždy pravda.
-typ c Soubor je typu c :
b Blokové (vyrovnávací) speciální
C Zvláštní znak (nebuštěný)
d Adresář
str Pojmenovaná trubka (FIFO)
F Pravidelný soubor
l Symbolický odkaz
s Zásuvka
D dveře (Solaris)
-uid n Číselné ID uživatele souboru je n .
-used n Soubor byl naposledy zpřístupněn n dní po jeho posledním změně stavu.
-user uname Soubor je vlastněn uživatelem uname (číselné uživatelské ID povoleno).
-xtype c Stejný jako typ, pokud soubor není symbolický odkaz. Pro symbolické vazby: jestliže - nebylo zadáno, je pravda, jestli je soubor odkazem na soubor typu c ; jestliže -sled je dán, pravdivý jestliže c je l. Jinými slovy, pro symbolická spojení,
-xtype zkontroluje typ souboru, který -typ nekontroluje.

Akce

-exec příkaz ;

Provést příkaz ; pokud je vrácena stav 0. Všechny následující argumenty, které se mají najít, se považují za příkazy k příkazu, dokud argument obsahující ";" se setkáváme. Řetězec `{} 'je nahrazen aktuálním názvem souboru, který se zpracovává všude tam, kde se objevuje v argumentu příkazu, a to nejen v argumentech, kde je sám, jako v některých verzích hledání . Obě tyto konstrukce možná budou muset uniknout (pomocí `\ ') nebo citované, aby je ochránily před expanzí ze skořápky. Příkaz je spuštěn v počátečním adresáři.

-fls soubor

Skutečný; jako -l, ale zapisuje do souboru jako -fprint.

-fprint soubor

Skutečný; vytisknout úplný název souboru do souboru . Pokud soubor neexistuje při spuštění hledání, je vytvořen; pokud existuje, je zkrácena. Názvy souborů `` / dev / stdout '' a `` dev / stderr '' jsou zpracovány speciálně; vztahují se na standardní výstup a standardní výstupní chybu.

-fprint0 souboru

Skutečný; jako -print0, ale zapisuje do souboru jako -fprint.

-fprintf formát souboru

Skutečný; jako -printf, ale zapisujte do souboru jako -fprint.

-ok příkaz ;

Jako -exec, ale nejprve se zeptat uživatele (na standardním vstupu); pokud odpověď nezačíná písmenem "y" nebo "Y", příkaz nespusťte a nevráťte falešně.

-tisk

Skutečný; vytisknout úplný název souboru na standardním výstupu a následovat nový řádek.

-print0

Skutečný; vytisknout úplný název souboru na standardní výstup, následovaný nulovým znakem. To umožňuje, aby názvy souborů, které obsahují nové řádky, byly správně interpretovány programy, které zpracovávají výstup hledání.

-printf formátu

Skutečný; formát tisku na standardním výstupu, interpretace direktiv "escapes" a "%". Šířka a přesnost pole lze zadat jako u funkce "printf" C. Na rozdíl od -tisk, -printf nepřidá nový řádek na konci řetězce. Úniky a směrnice jsou:

\A

Zvonkový zvon.

\ b

Backspace.

\C

Zastavte okamžitý tisk z tohoto formátu a vypusťte výstup.

\F

Form feed.

\ n

Nový řádek.

\ r

Návrat vozíku.

\ t

Horizontální karta.

\proti

Záložka Vertikální.

\\

Doslovné lomítko (`\ ').

\ NNN

Postava, jejíž kód ASCII je NNN (osmičkový).

Znak "` ", po kterém následuje jakýkoli jiný znak, je považován za obyčejný znak, takže jsou oba vytištěny.

%%

Doslovný procentní znak.

%A

Soubor posledního času přístupu ve formátu vráceného funkcí C `ctime.

% A k

Poslední čas přístupu k souboru ve formátu určeném k , který je buď `@ 'nebo direktiva pro funkci C` strftime'. Možné hodnoty pro k jsou uvedeny níže; některé z nich nemusí být k dispozici ve všech systémech kvůli rozdílům v "strftime" mezi systémy.

@

sekundy od 1. ledna 1970, 00:00 GMT.

Časová pole:

H

hodina (00..23)

I

hodina (01..12)

k

hodin (0..23)

l

hodina (1..12)

M

minutu (00..59)

str

místního úřadu AM nebo PM

r

čas, 12 hodin (hh: mm: ss [AP] M)

S

druhý (00..61)

T

čas, 24 hodin (hh: mm: ss)

X

lokální reprezentace času (H: M: S)

Z

časové pásmo (např. EDT), nebo nic, pokud není možné určit časové pásmo

Políčka Datum:

A

místní název zkráceného denního dne (Sun..Sat)

A

místní jméno celé dne v týdnu, variabilní délka (neděle, srpen)

b

místní název zkráceného měsíce (Jan..Dec)

B

místní název celého měsíce, variabilní délka (leden, prosinec)

C

datum a čas místního sídla (So 04.11 12:02:33 EST 1989)

d

den v měsíci (01..31)

D

datum (mm / dd / rr)

h

stejně jako b

j

den roku (001..366)

m

měsíc (01..12)

U

týdenní číslo roku s nedělí jako prvním dnem týdne (00..53)

w

den v týdnu (0..6)

W

týdenní číslo roku s pondělí jako prvním dnem týdne (00..53)

X

reprezentace data lokalizace (mm / dd / rr)

y

poslední dvě číslice roku (00..99)

Y

rok (1970 ...)

% b

Velikost souboru v bloku 512 bajtů (zaokrouhleno nahoru).

%C

Poslední změna stavu souboru ve formátu vráceného funkcí C `ctime.

% C k

Poslední změna stavu souboru ve formátu určeném k , který je stejný jako u% A.

% d

Hloubka souboru ve stromovém adresáři; 0 znamená, že soubor je argument příkazového řádku.

%F

Název souboru s odstraněnými vedoucími adresáři (pouze poslední prvek).

%F

Typ souborového systému, ve kterém je soubor zapnutý; tato hodnota může být použita pro -ftype.

%G

Název skupiny souboru nebo ID skupiny čísel, pokud skupina nemá žádné jméno.

%G

ID číselné skupiny souboru.

% h

Vedoucí adresáře názvu souboru (všechny kromě posledního prvku).

% H

Argument příkazového řádku, pod kterým byl nalezen soubor.

% i

Inode číslo souboru (v desítkovém souboru).

% k

Velikost souboru v bloku 1K (zaokrouhleno nahoru).

% l

Objekt symbolického odkazu (prázdný řetězec, pokud soubor není symbolický odkaz).

% m

Soubory oprávnění souboru (v osmičce).

% n

Počet pevných odkazů na soubor.

% p

Jméno souboru.

% P

Jméno souboru s názvem argumentu příkazového řádku, pod kterým byl nalezen odstraněn.

% s

Velikost souboru v bajtech.

% t

Poslední změna času souboru ve formátu vráceného funkcí C `ctime '.

% T k

Poslední změna souboru ve formátu určeném k , který je stejný jako u% A.

% u

Uživatelské jméno souboru nebo číselné uživatelské ID, pokud uživatel nemá žádné jméno.

% U

Numerické uživatelské ID souboru.

Znak "%", po kterém následuje jakýkoli jiný znak, je vyřazen (ale je vytištěn druhý znak).

-prořezávat

Pokud -depth není dána, pravda; neklesněte do aktuálního adresáře.
Je-li dáno, je falešné; žádný efekt.

-ls

Skutečný; seznam aktuálního souboru ve formátu `ls -dils 'na standardním výstupu. Počty bloků jsou bloky 1K, pokud není nastavena proměnná prostředí POSIXLY_CORRECT, v takovém případě jsou použity bloky o velikosti 512 bajtů.

Operátoři

Uvedené v pořadí podle klesající priority:

( expr )

Přednost síly.

! expr

Je pravdivé, pokud expr je nepravdivé.

-exp

Stejný jako ! expr .

expr1 expr2

A (implicitní); expr2 není vyhodnocen, jestliže expr1 je falešný.

expr1 -a expr2

Stejné jako expr1 expr2 .

expr1 - a expr2

Stejné jako expr1 expr2 .

expr1 -o expr2

Nebo; expr2 se nehodnotí, pokud je expr1 true.

expr1 - nebo expr2

Stejné jako expr1 -o expr2 .

expr1 , expr2

Seznam; jak expr1 tak expr2 jsou vždy vyhodnocovány. Hodnota expr1 je vyřazena; hodnota seznamu je hodnota expr2 .

Příklady

najít / home -user joe

Najděte všechny soubory pod adresářem / domovem, které vlastní uživatel Joe.

find / usr -name * stat

Najděte každý soubor pod adresářem / usr končit v ".stat".

najít / var / spool -mtime +60

Najděte každý soubor pod adresářem / var / spool, který byl upraven před více než 60 dny.

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

Najděte soubory s názvem jádro v nebo pod adresářem / tmp a odstraňte je. Všimněte si, že to bude fungovat nesprávně, pokud existují názvy souborů obsahujících nové řádky, jednoduché nebo dvojité uvozovky nebo mezery.

find / tmp -name jádro -type f -print0 | xargs -0 / bin / rm -f

Najděte soubory s názvem jádro v nebo pod adresářem / tmp a odstraňte je, zpracováváte názvy souborů tak, že názvy souborů nebo adresářů, které obsahují jednoduché nebo dvojité uvozovky, mezery nebo nové řádky, jsou správně zpracovávány. Test typu -name přichází před testem typu, aby se zabránilo volání stat (2) v každém souboru.

najít. -typ f -exec soubor '{}' \;

Spustí `soubor 'v každém souboru v nebo pod aktuálním adresářem. Všimněte si, že závorky jsou uzavřeny v jednoduchých uvozovkách, které je chrání před interpretací jako interpunkce skriptů. Bodkoćka je podobnę chráněna poużitím zpętného lomítka, aćkoli ";" mohla být v tomto případě použita.

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

Projděte souborový systém jen jednou, seznam souborů a adresářů setuid do /root/suid.txt a velkých souborů do /root/big.txt .

najít $ HOME -time 0

Vyhledejte soubory ve vašem domovském adresáři, které byly upraveny za posledních 24 hodin. Tento příkaz funguje tímto způsobem, protože čas od posledního modifikace souboru je rozdělen do 24 hodin a veškerý zbytek je vyřazen. To znamená, že k tomu, aby odpovídal -mtime

0 , soubor bude muset mít v minulosti úpravu, která je kratší než 24 hodin.

najít. -perm 664

Vyhledejte soubory, které mají oprávnění ke čtení a zápis pro vlastníka a skupinu, ale které ostatní uživatelé mohou číst, ale nepsat. Soubory, které splňují tato kritéria, ale mají nastavené další bity oprávnění (například pokud někdo může spustit soubor), nebudou odpovídat.

najít. -perm -664

Vyhledejte soubory, které mají oprávnění ke čtení a zápis pro vlastníka a skupinu a které další uživatelé mohou číst, bez ohledu na přítomnost libovolných bitů pro další povolení (například spustitelný bit). To bude odpovídat souboru, který má například režim 0777.

najít. -perm / 222

Vyhledejte soubory, které lze zapisovat někým (jejich majitel, nebo jejich skupina nebo někdo jiný).

najít. -perm / 220 najít. -perm / u + w, g + w najít. -perm / u = w, g = w

Všechny tři příkazy dělají totéž, ale první používá osmičkovou reprezentaci režimu souborů a další dva používají symbolický formulář. Tyto příkazy vyhledávají všechny soubory, které lze zapsat buď vlastním nebo jejich skupinou. Soubory nemusí být zapisovatelné jak vlastníkem, tak skupinou, která má být přiřazena. buď to udělá.

najít. -perm -220 najít. -perma -g + w, u + w

Oba tyto příkazy dělají totéž; hledání souborů, které jsou zapisovatelné jak jejich majitelem, tak i jejich skupinou.

najít. -perm -444 -perm / 222! -perm / 111 najít. -perma -a + r -perm / a + w! -perm / a + x

Tyto dva příkazy vyhledávají soubory, které jsou čitelné pro všechny (-perm -444 nebo -perm -a + r), mají alespoň nastavený bit pro zápis (-perm / 222 nebo -perm / a + w), ale nejsou spustitelné pro někoho (! -perm / 111 a / -perm / a + x)

Důležité: Použijte příkaz man ( % man ), abyste zjistili, jaký příkaz se používá v konkrétním počítači.