Folosind comanda Linux și Unix: găsiți

Comanda Linux și Unix găsește execută o căutare pentru fișiere într-o ierarhie de directoare.

Sintaxă pentru comanda de căutare:

găsi [cale ...] [expresie]

Descriere

Această pagină manuală documentează versiunea GNU a găsi . Comanda găsește căutarea arborelui de directoare înrădăcinată la fiecare nume de fișier dat, evaluând expresia dată de la stânga la dreapta, în conformitate cu regulile de prioritate (vezi secțiunea privind operatorii de mai jos), până când rezultatul este cunoscut; cu alte cuvinte, partea din stânga este falsă și operată, adevărată pentru sau , în care punct se găsește mișcarea pe următorul nume de fișier.

Primul argument care începe cu:

este considerat începutul expresiei; orice argumente înainte de a fi căi de căutare, și orice argumente după el sunt restul expresiei. Dacă nu sunt date căi, se folosește directorul curent. Dacă nu este dată nicio expresie, se utilizează expresia -print .

Comanda de căutare se termină cu starea 0 dacă toate fișierele sunt procesate cu succes, mai mare de 0 dacă apar erori.

Expresii

Expresia este alcătuită din opțiuni (care afectează operația generală mai degrabă decât procesarea unui anumit fișier și întoarcerea întotdeauna adevărată), testele (care returnează o valoare adevărată sau falsă) și acțiunile (care au efecte secundare și returnează un adevărat sau valoare falsă), toate separate de operatori. Expresia - și se presupune că operatorul este omis. Dacă expresia nu conține alte acțiuni decât -prune , atunci -print se face pe toate fișierele pentru care expresia este adevărată.

Opțiuni

Toate opțiunile se întorc întotdeauna la adevărat. Ele intotdeauna produc efecte, mai degraba decat sa fie procesate doar atunci cand se ajunge la locul lor in expresie. Prin urmare, pentru claritate, este mai bine să le plasați la începutul expresiei.

-daystart Măsurați timpii (pentru -amin, -atime, -cmin, -time, -mmin și -mtime ) de la începutul zilei de astăzi, mai degrabă decât de acum 24 de ore.
-adâncime Procesați conținutul fiecărui director înainte de directorul propriu-zis.
-urma Dereference link-uri simbolice. Implică -noleaf .
- ajuta sau ajuta Imprimați un rezumat al utilizării liniei de comandă a căutării și ieșirii.
-maxdepth [număr] Coborâți la cel mai mare număr de niveluri (un număr întreg negativ) de directoare aflate sub argumentele liniei de comandă. Expresia -maxdepth 0 înseamnă numai aplicarea testelor și acțiunilor la argumentele liniei de comandă.
-mindepth [număr] Nu aplicați teste sau acțiuni la niveluri mai mici decât numărul (un număr întreg negativ). Expresia -mindepth 1 înseamnă procesarea tuturor fișierelor, cu excepția argumentelor din linia de comandă.
-montură Nu coborâți directoare pe alte sisteme de fișiere. Un nume alternativ pentru -xdev , pentru compatibilitatea cu alte versiuni ale căutării .
-noleaf Nu optimizați presupunând că directoarele conțin mai puține subdirectoare decât numărul lor de link-uri grele. *
-versiune sau -versiune Imprimați numărul versiunii de căutare și ieșiți.
-xdev Nu coborâți directoare pe alte sisteme de fișiere.

* Această opțiune este necesară atunci când căutați sisteme de fișiere care nu respectă convenția Unix-directoare, cum ar fi sistemele de fișiere CD-ROM sau MS-DOS sau punctele de montare a volumului AFS. Fiecare director dintr-un sistem de fișiere obișnuit Unix are cel puțin 2 link-uri tari: numele și codul său . (perioadă). În plus, subdirectoarele sale (dacă există) au fiecare o intrare legată la acel director.

Atunci când găsește un director, după ce a afișat mai puține subdirectoare decât numărul de linkuri al directorului, știe că restul intrărilor din director sunt non-directoare (fișiere de frunze în arborele de directoare). Dacă este necesar să se examineze numai numele fișierelor, nu este nevoie să le stăpânești; aceasta oferă o creștere semnificativă a vitezei de căutare.

teste

Argumentele numerice pot fi specificate ca:

+ n Pentru mai mare decât n.
-N Pentru mai puțin de n.
n Pentru exact n.
-amină n Fișierul a fost accesat ultima oară în urmă cu câteva minute.
-neu [fișier] Fișierul a fost accesat ultima dată mai recent decât modificarea fișierului . -anagerul este afectat de -foloseste numai daca -sunt inainte de a-apare pe linia de comanda.
-atime n Fișierul a fost accesat ultima oară * acum 24 ore.
-cmin n Starea fișierului a fost modificată ultima oară în urmă cu câteva minute.
-cnewer [fișier] Starea fișierului a fost ultima dată modificată mai recent decât modificarea fișierului.
- cnewer este afectat de -foloseste doar daca -sunt inainte de -cnewer pe linia de comanda.
-cmp n Starea fișierului a fost modificată ultima oară * acum 24 ore.
-gol Fișierul este gol și este fie un fișier obișnuit, fie un director.
-fals Întotdeauna fals.
-tip [tip] Fișierul se află într-un sistem de fișiere de tipul specificat. Tipurile de sisteme de fișiere valide variază între diferite versiuni de Unix; o listă incompletă a tipurilor de sisteme de fișiere acceptate pe o versiune de Unix sau alta este: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Puteți utiliza -printf cu directiva% F pentru a vedea tipurile de sisteme de fișiere.
-Gid n ID-ul grupului numeric al fișierului este n .
-group [gname] Fișierul aparține grupului gname (permis grupului numeric permis).
-name [model] Cum ar fi -includ, dar meciul nu are sensibilitate la litere mici.
-inima [model] Ca și -name , dar meciul este insensibil pentru litere mici. De exemplu, modelele pentru * și F? se potrivesc cu numele fișierelor Foo , FOO , foo , fOo etc.
-inum n Fișierul are numărul inode n .
-path [model] Cum ar fi -path , dar meciul este insensibil pentru litere mari.
-regex [model] Ca -regex, dar meciul este insensibil pentru litere mici.
- link-uri n Fișierul are n linkuri.
-informa [model] Fișierul este o legătură simbolică al cărei conținut corespunde modelului de coajă. Metacaractele nu tratează / sau . special.
-mmin n Datele fișierelor au fost modificate ultima oară în urmă cu câteva minute.
-m n Datele fișierelor au fost modificate ultima oară * acum 24 de ore.
-name [model] Baza de nume a fișierului (calea cu directorii eliminați) se potrivește cu modelul de coajă. Metacaractele ( * , ? , Și [] ) nu se potrivesc cu a . la începutul numelui de bază. Pentru a ignora un director și fișierele de sub el, utilizați -prune ; a se vedea un exemplu în descrierea traseului .
-newer [fișier] Fișierul a fost modificat mai recent decât fișierul . Expresia -newer este afectată de -foloseste numai dacă -sunt înaintea -newer pe linia de comandă.
-nouser Niciun utilizator nu corespunde numelui de utilizator numeric al fișierului.
-nogroup Niciun grup nu corespunde ID-ului grupului numeric al fișierului.
-path [model] Numele de fișier se potrivește cu modelul tiparului coajă. Metacaractele nu tratează / sau . special; astfel încât, de exemplu, să găsească. -path "./sr*sc va imprima o intrare pentru un director numit ./src/misc (dacă există). Pentru a ignora un întreg arbore de directoare, utilizați -prune, mai degrabă decât să verificați fiecare fișier din arbore. De exemplu, pentru a sări peste directorul src / emacs și toate fișierele și directoarele de sub el și pentru a tipări numele celorlalte fișiere găsite, faceți ceva de genul: găsi. -path "./src/emacs" -prune -o -print
-perm [mod] Fișierele de permisiune ale fișierelor sunt exact [mod] (octal sau simbolic). Modurile simbolice utilizează modul 0 ca punct de plecare.
-perm-mod Toți bitii de permisiune [mode] sunt setați pentru fișier.
-perm + mod Orice bit de permisiune [mode] este setat pentru fișier.
-regex [model] Numele de fișier se potrivește cu modelul expresiei regulate. Acesta este un meci pe întreaga cale, nu o căutare. De exemplu, pentru a potrivi un fișier numit ./fubar3, puteți folosi expresia regulată . * Bar. sau . * b. * 3 , dar nu b. * r3 .
-size n [bckw] Fișierul utilizează n unități de spațiu. Unitățile au blocuri de 512 octeți în mod prestabilit sau dacă b urmează n , octeți dacă c urmează n , kilobytes dacă k urmează n sau 2-octeți dacă w urmează n . Dimensiunea nu contorizează blocuri indirecte, dar numără blocuri în fișiere rare care nu sunt alocate.
-Adevărat Întotdeauna adevărat.
- tip c Fișierul este de tip c :
b Block (tamponat) special
c Caracter (nebuferat) special
d Director
p Conducta numită (FIFO)
f Fișier normal
L Link-uri simbolice
s Priză
D ușă (Solaris)
-uid n ID-ul de utilizator numeric al fișierului este n .
-utilizat n Fișierul a fost accesat în ultimele zile după ce ultimul său statut a fost modificat.
-utilizator Fișierul este proprietatea utilizatorului uname (permis de utilizator numeric).
-xtype c Același tip cu excepția cazului în care fișierul este o legătură simbolică. Pentru legăturile simbolice: dacă -follow nu a fost dat, adevărat dacă fișierul este o legătură la un fișier de tip c ; dacă - a fost dat, adevărat dacă c este l. Cu alte cuvinte, pentru legăturile simbolice,
-xtype verifică tipul fișierului pe care tipul nu îl verifică.

acţiuni

comanda -exec;

Executați comanda ; adevărat dacă statusul 0 este returnat. Următoarele argumente care trebuie găsite sunt considerate a fi argumente pentru comanda până când un argument constând din ";" este întâlnit. Șirul "{}" este înlocuit de numele curent al fișierului care este procesat oriunde apare în argumentele comenzii, nu doar în argumentele în care este singur, ca în unele versiuni ale căutării . Este posibil ca ambele construcții să fie scape (cu un "\") sau cotate pentru a le proteja de expansiune de către coajă. Comanda este executată în directorul de pornire.

-fls fișier

Adevărat; cum ar fi -ls dar scrie la fișier ca -fprint.

- fișierul de imprimare

Adevărat; imprimă numele fișierului complet în fișierul de fișier . Dacă fișierul nu există atunci când se găsește , este creat; dacă există, este trunchiată. Numele fișierelor "/ dev / stdout" și "/ dev / stderr" sunt tratate în mod special; se referă la ieșirea standard și, respectiv, la ieșirea de eroare standard.

-fprint0 fișier

Adevărat; cum ar fi -print0, dar scrieți la fișier ca -fprint.

-ffintf format de fișier

Adevărat; cum ar fi -printf, dar scrieți la fișier ca -fprint.

comanda -ok;

Ca -exec, dar întrebați mai întâi utilizatorul (pe intrarea standard); dacă răspunsul nu începe cu "y" sau "Y", nu executați comanda și returnați false.

-imprimare

Adevărat; imprimați numele complet al fișierului pe ieșirea standard, urmat de o linie nouă.

-print0

Adevărat; imprimați numele complet al fișierului pe ieșirea standard, urmat de un caracter nul. Acest lucru permite ca numele fișierelor care conțin linii noi să fie interpretate corect de către programele care procesează rezultatele de căutare.

-printf format

Adevărat; tipăriți formatul pe ieșirea standard, interpretând direcțiile `\ 'escapes și`%'. Lățimile câmpurilor și precizările pot fi specificate ca în cazul funcției `printf 'C. Spre deosebire de -print, -printf nu adauga o noua linie la sfarsitul sirului. Escapesele și directivele sunt:

\A

Alarmă clopot.

\ b

Backspace.

\ c

Opriți imprimarea imediat din acest format și spălați ieșirea.

\ f

Feed feed.

\ n

Linie nouă.

\ r

Retur transport.

\ t

Fila orizontală.

\ v

Fila verticală.

\\

Un backslash literal (`\ ').

\ NNN

Personajul al cărui cod ASCII este NNN (octal).

Un caracter "` "urmat de orice alt caracter este tratat ca un caracter obișnuit, astfel că ambele sunt imprimate.

%%

Un semn procentual literal.

%A

Ultima accesare a fișierului în formatul returnat de funcția C `ctime.

% A k

Ultima accesare a fișierului în formatul specificat de k , care este fie `@ ', fie o directivă pentru funcția C` strftime'. Valorile posibile pentru k sunt enumerate mai jos; unele dintre ele s-ar putea să nu fie disponibile în toate sistemele, din cauza diferențelor dintre `strftime 'dintre sisteme.

@

secunde de la 1 ianuarie 1970, 00:00 GMT.

Câmpuri de timp:

H

ora (00..23)

eu

ora (01..12)

k

ora (0..23)

L

ora (1..12)

M

minute (00..59)

p

localitatea AM sau PM

r

timp, 12 ore (hh: mm: ss [AP] M)

S

secundă (00..61)

T

timp, 24 de ore (hh: mm: ss)

X

localizarea timpului local (H: M: S)

Z

(de exemplu, EDT), sau nimic dacă nu poate fi determinată nicio fus orar

Câmpuri de date:

A

locație abreviată a zilei de sâmbătă (Sun..Sat)

A

localizarea întregului nume de săptămână, lungimea variabilă (duminică, sâmbătă)

b

locația abreviată a lunii (Jan..Dec)

B

localizarea întregii luni a lunii, lungimea variabilă (ianuarie - decembrie)

c

data și ora locației (Sat Nov 04 12:02:33 EST 1989)

d

ziua lunii (01..31)

D

data (mm / zi / an)

h

la fel ca b

j

ziua anului (001..366)

m

luna (01..12)

U

numărul de săptămâni al anului cu duminică în prima zi a săptămânii (00..53)

w

zi din săptămână (0..6)

W

numărul de săptămâni al anului cu luni în prima zi a săptămânii (00..53)

X

localizarea reprezentării locale (mm / zi / an)

y

ultimele două cifre ale anului (00..99)

Y

an (1970 ...)

% b

Dimensiunea fișierului în blocuri de 512 octeți (rotunjit).

% c

Ultimul moment al modificării stării fișierului în format returnat de funcția C `ctime.

% C k

Ultimul moment al modificării stării fișierului în formatul specificat de k , care este același ca pentru% A.

% d

File de adâncime în arborele de directoare; 0 înseamnă că fișierul este un argument din linia de comandă.

% f

Numele fișierului cu toate directoarele șterse (numai ultimul element).

F%

Tipul sistemului de fișiere în care se află fișierul; această valoare poate fi utilizată pentru "fstype".

% g

Numele grupului de fișier sau ID-ul grupului numeric dacă grupul nu are nume.

% G

ID-ul grupului numeric al fișierului.

% h

Conducerea directoare a numelui fișierului (cu excepția ultimului element).

% H

Argumentul liniei de comandă în care fișier a fost găsit.

% i

Numărul fișierului inode al fișierului (în zecimal).

% k

Dimensiunea fișierului în blocuri de 1K (rotunjit).

% l

Obiectul legăturii simbolice (șir gol dacă fișierul nu este o legătură simbolică).

% m

Fișiere de permisiune ale fișierelor (în octal).

% n

Numărul de linkuri dure pentru fișier.

% p

Numele fișierului.

% P

Numele fișierului cu numele argumentului din linia de comandă sub care a fost eliminat.

% s

Dimensiunea fișierului în octeți.

% t

Ultima modificare a fișierului în formatul returnat de funcția C `ctime.

% T k

Ultima modificare a fișierului în formatul specificat de k , care este același ca pentru% A.

% u

Numele de utilizator al fișierului sau ID-ul de utilizator numeric dacă utilizatorul nu are nume.

% U

ID-ul de utilizator numeric al fișierului.

Un caracter "%" urmat de orice alt caracter este aruncat (dar celălalt caracter este tipărit).

-prună uscată

Dacă -depth nu este dat, adevărat; nu coborâți directorul curent.
Dacă este dată -depth, false; fara efect.

-Este

Adevărat; lista fișierul curent în format `ls -dils 'la ieșirea standard. Numărul blocurilor este de blocuri de 1K, cu excepția cazului în care variabila de mediu POSIXLY_CORRECT este setată, caz în care sunt utilizate blocuri de 512 octeți.

operatorii

Listate în ordinea descrescătoare a precedentei:

( expr )

Forța precedentă.

! expr

Adevărat dacă expr este fals.

- nu expr

La fel ca ! expr .

expr1 expr2

Și (implicit); expr2 nu este evaluată dacă expr1 este falsă.

expr1 -a expr2

La fel ca expr1 expr2 .

expr1 - și expr2

La fel ca expr1 expr2 .

expr1 -o expr2

Sau; expr2 nu este evaluat dacă expr1 este adevărat.

expr1 - sau expr2

La fel ca expr1 -o expr2 .

expr1 , expr2

Listă; atât expr1, cât și expr2 sunt întotdeauna evaluate. Valoarea lui expr1 este eliminată; valoarea listei este valoarea expr2 .

Exemple

găsi / home-utilizator Joe

Găsiți fiecare fișier sub directorul / casa deținută de utilizatorul joe.

găsi / usr -name * stat

Găsiți toate fișierele din directorul / usr care se termină în ".stat".

găsi / var / spool -mtime +60

Găsiți fiecare fișier din directorul / var / spool modificat cu mai mult de 60 de zile în urmă.

găsi / tmp -name core -type f -print | xargs / bin / rm -f

Găsiți fișiere numite core în sau sub directorul / tmp și ștergeți-le. Rețineți că acest lucru va funcționa incorect dacă există nume de fișiere care conțin linii noi, citate simple sau duble sau spații.

găsi / tmp -name core -type f -print0 | xargs -0 / bin / rm -f

Găsiți fișiere numite core în sau sub directorul / tmp și ștergeți-le, procesând numele de fișiere astfel încât numele de fișiere sau directoare care conțin citate, spații sau linii noi, simple sau duble, să fie corect tratate. Testul -name se află înaintea testului de tip pentru a evita necesitatea de a apela stat (2) în fiecare fișier.

găsi . -type f -exec fișier '{}' \;

Rulează "fișierul" pe fiecare fișier din sau sub directorul curent. Observați că bretelele sunt închise în citate simple pentru a le proteja de interpretare ca punctuație a script-urilor. Valoarea virgulă este protejată în mod similar prin folosirea unei lunete, totuși ";" ar fi putut fi folosită și în acest caz.

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

Traversează sistemul de fișiere o singură dată, listând fișierele și directoarele setuid în /root/suid.txt și fișierele mari în /root/big.txt .

găsi $ HOME -mtime 0

Căutați fișiere în directorul dvs. de acasă care au fost modificate în ultimele douăzeci și patru de ore. Această comandă funcționează astfel, deoarece timpul de la ultima modificare a fișierului este împărțit la 24 de ore, iar restul este eliminat. Asta înseamnă că pentru a se potrivi -mtime

0 , un fișier va trebui să aibă o modificare în trecut care este mai mică de 24 de ore în urmă.

găsi . -perm 664

Căutați fișierele care au permisiunea de citire și scriere pentru proprietar și grup, dar pe care ceilalți utilizatori le pot citi, dar nu le pot scrie. Fișierele care îndeplinesc aceste criterii, dar au setat alte setări de permisiuni (de exemplu, dacă cineva poate executa fișierul) nu vor fi potrivite.

găsi . -permă -664

Căutați fișierele care au permisiunea de citire și scriere pentru proprietar și grup și care alți utilizatori pot citi, indiferent de prezența oricăror biți de permisiune suplimentară (de exemplu bitul executabil). Acest lucru se va potrivi cu un fișier care are modul 0777, de exemplu.

găsi . -perm / 222

Căutați fișiere care pot fi inscripționate de cineva (proprietarul, grupul sau oricine altcineva).

găsi . -perm / 220 găsi. -perm / u + w, g + w găsiți. -perm / u = w, g = w

Toate cele trei comenzi fac același lucru, dar prima folosește reprezentarea octalică a modului fișier, iar celelalte două utilizează forma simbolică. Aceste comenzi caută toate fișierele care pot fi scriute de proprietar sau de grupul lor. Fișierele nu trebuie să poată fi inscripționate atât de către proprietar, cât și de grup care să fie potrivite; fie va face.

găsi . -perm -220 găsi. -permul -g + w, u + w

Ambele comenzi fac același lucru; căutați fișiere care pot fi scriute atât de proprietarul lor, cât și de grupul acestora.

găsi . -permă -444 -perm / 222! -perm / 111 găsi. -permă -a + r -perm / a + w! -perm / a + x

Aceste două comenzi caută atât fișierele care pot fi citite pentru toată lumea (-perm -444 sau -perm -a + r), au cel puțin setul de biți de scriere (-perm / 222 sau -perm / a + w), dar nu sunt executabile pentru oricine (! -perm / 111 și / -perm / a + x respectiv)

Important: Utilizați comanda om ( % man ) pentru a vedea cum se utilizează o comandă pe computerul dvs. particular.