găsi (Unix)

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

găsi este o comandă de Unix si Unix- ului de operare sisteme , și mai mult , în general , a POSIX [1] și GNU [2] sisteme , care caută pentru fișierele și directoarele din sistemul de fișiere care îndeplinesc criteriile specificate, care enumeră numele lor sau executând o comandă pentru rezultatele găsite.

Sintaxă

Sintaxa generală a găsirii este:

 găsiți [ opțiuni ] [-] dir1 [ dir2 …] [ directivă1 …]

Parametrii dir indică directoarele din care să căutați.

Parametrii directivei specifică atât criteriile de căutare, cât și acțiunile care trebuie întreprinse.

Linia dublă - (opțional) indică faptul că următorii parametri nu trebuie considerați opțiuni.

Opțiuni

Printre principalele opțiuni:

-H
Dacă legăturile simbolice sunt specificate în parametrii de comandă, atributele fișierelor reale sau ale directoarelor (dacă există) la care se face referire prin legături simbolice sunt luate în considerare pentru comparații și nu pe cele ale legăturilor simbolice. Acest lucru se aplică numai parametrilor comenzii find și nu elementelor întâlnite în timpul căutării.
-L
În cazul legăturilor simbolice, se iau în considerare atributele fișierelor și / sau directoarelor reale indicate prin legături simbolice, nu pe cele ale legăturilor simbolice. Acest lucru este valabil atât pentru legături simbolice întâlnite în timpul căutării și orice link - uri simbolice specificate în parametrii Find.

Directivele

Directivele indică teste care trebuie efectuate pe fișierul sau directorul în cauză, care pot sau nu pot fi trecute, sau efectuează acțiuni sau chiar modifică comportamentul găsirii .

Printre cele mai comune directive se numără:

-nume model
Treceți testul dacă numele fișierului sau directorului se potrivește cu modelul specificat. Modelul este un șir conform sintaxei pentru modelele globului , de exemplu * .mp3 sau main. [Ch] (pentru modul în care funcționează shell-ul textului , acesta trebuie indicat între ghilimele simple sau duble sau precedând fiecare metacaracter printr-o bară inversă ).
-tip tip
Treceți testul dacă tipul de fișier se potrivește cu cel indicat. tipul este un caracter care poate fi:
-user user_or_UID
Trece testul dacă proprietarul fișierului sau directorului este utilizatorul specificat. Utilizatorul poate fi indicat prin numele său de utilizator sau prin identificatorul său numeric de utilizator .
-group group_or_GID
Treceți testul dacă grupul atribuit fișierului sau directorului este cel specificat. Grupul poate fi indicat prin nume sau prin identificatorul său numeric de grup .
-nouser
Treceți testul dacă proprietarul fișierului sau directorului nu se numără printre utilizatorii definiți în sistem.
-nogrup
Treceți testul dacă grupul atribuit fișierului sau directorului nu se află printre grupurile definite în sistem.
-mindepth
Exprimă profunzimea minimă a căutării în subdirectoare.
-adancime maxima
Exprimă profunzimea maximă a căutării în subdirectoare.
-câteva zile
Trece testul dacă ultima dată de acces la citire în fișier sau director este astăzi minus numărul de zile specificat. Pentru a indica orice dată ulterioară puteți utiliza prefixul + (de ex. +10 ). Pentru a indica orice dată anterioară puteți utiliza prefixul - ( de exemplu , -4).
-zile de timp
Trece testul dacă ultima dată modificată a fișierului sau directorului este astăzi minus numărul de zile specificat. Pentru a indica orice dată ulterioară puteți utiliza prefixul + (de ex. +10 ). Pentru a indica orice dată anterioară puteți utiliza prefixul - ( de exemplu , -4).
-zile de timp
Trece testul dacă data creării fișierului sau directorului este astăzi minus numărul de zile specificat. Pentru a indica orice dată ulterioară puteți utiliza prefixul + (de ex. +10 ). Pentru a indica orice dată anterioară puteți utiliza prefixul - ( de exemplu , -4).
-numele fișierului nou
Treceți testul dacă fișierul sau directorul în cauză are ultima dată modificată după cea a numelui fișierului specificat.
-prună uscată
Trece întotdeauna testul și, dacă elementul luat în considerare este un director, acesta nu coboară în el pentru a căuta. Rețineți că căutările încep întotdeauna dintr-un director, deci nu este suficient să specificați această directivă singură pentru a evita recursivitatea, ci trebuie să construiți o expresie care vă permite să coborâți directorul de pornire.
-imprimare
Scrie numele fișierului sau directorului la ieșirea standard .
-exec comanda [ arg1 …];
Execută comanda specificată cu parametrii arg , înlocuind secvența {} din ei cu numele fișierului sau directorului în cauză. Ultimul dintre parametri trebuie să fie caracterul ; pentru a indica termenul directivei (pentru modul în care funcționează shell-ul textului , acesta trebuie indicat între ghilimele simple sau ghilimele duble sau precedat de o bară inversă , de exemplu cu „;” sau \; ). De exemplu
 găsi. -tip f -name "* .bak" -exec rm {} \;
caută și elimină fișiere cu extensia .bak executând comanda rm de câte ori există fișiere găsite;
-exec comanda [ arg1 ...] {} +
Execută comanda specificată cu parametri arg și adăugând acestora, ca parametri distincti, numele fișierelor sau directoarelor găsite. De exemplu
 găsi. -tip f -name "* .bak" -exec rm -f {} +
caută și elimină fișiere cu extensia .bak executând comanda rm o singură dată (sau chiar de mai multe ori, dacă numărul de elemente găsite depășește numărul maxim de parametri care pot fi specificați pentru o comandă), făcând efectiv utilizarea in combinație inutilă cu comanda xargs . Această a doua formă a opțiunii -exec este -exec mai nouă decât cea precedentă, totuși este posibil ca implementările vechi ale find să nu o susțină.

Două directive pot fi combinate (AND logice) prin specificarea lor una după alta sau prin interpunerea operatorului -a . De exemplu, expresia -tip f -user alice specifică că sunteți în căutarea fișierelor care aparțin utilizatorului alice . Dacă prima directivă eșuează la test, a doua nu este luată în considerare, conform evaluării de scurtcircuit .

Două sau mai multe directive pot fi plasate alternativ între ele (OR logic) prin interpunerea operatorului -o . De exemplu, expresia -name "* .h" -o -user bruno indică faptul că căutați fișiere sau directoare al căror nume se termină în .h sau care aparțin utilizatorului bruno . Dacă prima directivă trece testul, a doua nu este luată în considerare, conform evaluării de scurtcircuit .

Directivele pot fi grupate prin încadrarea lor între paranteze rotunde. De exemplu, expresia (-type f -user carla) -o (-type d -user daniele) indică faptul că căutați fișiere aparținând utilizatorului carla sau directoare aparținând utilizatorului daniele . În unele shell-uri (cum ar fi Bash ) trebuie să protejați parantezele precedându-le cu o bară inversă , cum ar fi \ ( și \) , deoarece altfel ar intra în conflict cu sintaxa obișnuită a shell-ului .

O directivă poate fi negată precedând-o cu un semn de exclamare ( ! ). De exemplu expresia ! -tipul d indică că sunteți în căutarea altor elemente decât directoare.

Exemple

Căutați fișiere obișnuite în directorul curent și în toate subdirectoarele sale:

 găsi. -tip f -print

Se caută în directorele / tmp și / var / tmp și în subdirectoarele lor pentru fișiere obișnuite care au fost modificate ultima dată în urmă cu mai puțin de zece zile și le șterge unul câte unul:

 find / tmp / var / tmp -type f -mtime -10 -exec rm -f {} \;

Ca și exemplul anterior, dar ștergeți fișierele în loturi:

 find / tmp / var / tmp -type f -mtime -10 -exec rm -f {} +

Căutați în directorul curent și în toate subdirectoarele sale orice nu este un fișier sau un director (de exemplu, găsiți legături simbolice , blocați dispozitive , țevi numite etc.):

 găsi. ! \ (-tip f -o -tip d \) -print

Enumerați totul în directorul curent, fără a intra în subdirectoare (rețineți că funcționează numai cu directorul curent deoarece are numele special . ):

 găsi. ! -Nume. -prune -print

Pe AIX 6.1 această sintaxă nu funcționează. Pentru a obține același rezultat, dar și în alte directoare decât cel curent, executați:

 găsiți /tmp/*.err

Fișierele * .err prezente numai în directorul / tmp vor fi afișate

Notă

  1. ^ (EN) găsiți în The Open Group Base Specifications Numărul 7 IEEE Std 1003.1-2008. Adus 20/06/2009 .
  2. ^ (RO) Invocarea căutării - Căutarea fișierelor în manualul GNU Findutils. Adus 19.05.2008 .
Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT