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á:
- -
- ( nebo )
- ,
- !
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 joeNajděte všechny soubory pod adresářem / domovem, které vlastní uživatel Joe.
find / usr -name * statNajděte každý soubor pod adresářem / usr končit v ".stat".
najít / var / spool -mtime +60Najdě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 -fNajdě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 -fNajdě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 0Vyhledejte 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 664Vyhledejte 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 -664Vyhledejte 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 / 222Vyhledejte 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 = wVš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 + wOba 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 + xTyto 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.