How to Find Files in Linux Using the Command Line

find este o comandă pentru filtrarea recursivă a obiectelor din sistemul de fișiere pe baza unui mecanism condițional simplu. Utilizați find pentru a căuta un fișier sau un director în sistemul de fișiere. Utilizând stegulețul -exec, fișierele pot fi găsite și prelucrate imediat în cadrul aceleiași comenzi.

Căutarea fișierelor Linux după nume sau extensie

Utilizați find din linia de comandă pentru a localiza un anumit fișier după nume sau extensie. Următorul exemplu caută fișiere *.err în directorul /home/username/ și în toate subdirectoarele:

find /home/username/ -name "*.err"

Ar trebui să vedeți o ieșire similară în consolă:

 /home/username/example.errThe matching file in the /home/username/ directory is "example.err"

Comandă și sintaxă comună de căutare Linux

Comanda find are de obicei următoarea formă:

find options starting/path expression
  • Atributul options controlează comportamentul și metoda de optimizare a procesului find.
  • Atributul starting/path definește directorul de nivel superior în care find începe filtrarea.
  • Atributul expression controlează testele care caută în ierarhia de directoare pentru a produce ieșirea.

Căutarea unui fișier în Linux folosind numele de fișier

Pentru a găsi un fișier folosind numele de fișier, utilizați sintaxa find -name filename. Prin omiterea căii de acces se caută fișierul pe întregul disc. De exemplu, puteți găsi un fișier numit example.err localizat în directorul /home/username cu următoarea comandă:

find -name example.err

Ar trebui să vedeți o ieșire similară:

 ./username/example.err

Căutați un fișier în directorul curent folosind comanda Find

Aruncați o privire la structura directorului și a fișierelor de exemplu. La acestea se face referire pe parcursul exemplelor din acest ghid.

 ├── directory_1│ ├── subdirectory_1│ │ └── example.err│ └── example.err├── directory_2│ └── example.err├── directory_3│ └── example.err├── image01.png├── web_files│ ├── app.html│ ├── cb=gapi.loaded_0│ ├── edit.html│ ├── m=_b,_tp│ ├── rs=AA2YrTtgyE1yYXiu-GuLS6sbJdYr0u8VBQ│ ├── rs=AA2YrTvod91nzEJFOvvfJUrn6_vLwwY0bw│ ├── saved_resource.html│ ├── single.html│ └── unnamed.jpg├── web.html└── example.err

Dacă vă aflați în directory_1 și doriți să găsiți fișierul example.err în cadrul directorului sau în oricare dintre subdirectoarele sale, puteți lansa următoarea comandă:

find . -name example.err

Lovitura dvs. seamănă cu următoarea:

 ./example.err./directory_1/example.err

Lovitura reflectă structura directorului directory_1:

 ├── directory_1│ ├── subdirectory_1│ │ └── example.err│ └── example.err

Căutarea fișierelor imagine în Linux utilizând linia de comandă

Referindu-ne la structura fișierelor din secțiunea anterioară, există o imagine numită image01.png care este localizată la rădăcina (/)s a structurii de directoare.

Pentru a găsi fișierul image01.png, rulați următoarea comandă find care localizează toate fișierele .png stocate în interiorul directorului /.

find -name *.png

Ar trebui să vedeți o ieșire similară:

 ./image01.png

Schimbați tipul de fișier imagine și căutați orice fișier .jpg în interiorul directorului rădăcină (/):

find -name *.jpg

Lovitura seamănă cu cea din exemplu. Consultați structura directorului de exemplu din secțiunea anterioară pentru a vizualiza locația fișierului.

 ./web_files/unnamed.jpg

Căutați un fișier gol în directorul dvs. utilizând linia de comandă

Pentru a găsi un fișier gol în directorul dvs. utilizând linia de comandă, emiteți următoarea comandă:

find . -type f -empty

Dacă nu se returnează nici o ieșire, înseamnă că nu există un fișier gol în directorul dvs. curent.

Opțiuni și optimizări pentru căutarea fișierelor în Linux utilizând linia de comandă

Configurația implicită pentru find ignoră legăturile simbolice. Dacă doriți ca find să urmărească și să returneze legăturile simbolice, adăugați opțiunea -L la comandă, așa cum se arată mai jos:

find -O3 -L /var/www/ -name "*.html"

Acestă comandă activează nivelul maxim de optimizare (-O3) și permite ca find să urmărească legăturile simbolice (-L). find caută în întregul arbore de directoare de sub /var/www/ fișierele care se termină cu .html.

find își optimizează strategia de filtrare pentru a crește performanța. Trei niveluri de optimizare selectabile de către utilizator sunt specificate ca -O1, -O2 și -O3. Optimizarea -O1 este cea implicită și forțează find să filtreze pe baza numelui de fișier înainte de a rula toate celelalte teste.

Optimizarea la nivelul -O2 prioritizează filtrele de nume de fișier, ca în -O1, și apoi execută toate filtrele de tip fișier înainte de a trece la alte condiții care necesită mai multe resurse. Optimizarea la nivelul -O3 permite find să efectueze cea mai severă optimizare și reordonează toate testele în funcție de cheltuiala lor relativă și de probabilitatea de reușită.

Comandă Descriere
-O1 Filtrează mai întâi pe baza numelui fișierului (implicit).
-O2 Primul nume de fișier, apoi tipul de fișier.
-O3 Permiteți find să reordoneze automat căutarea pe baza utilizării eficiente a resurselor și a probabilității. de succes
-maxdepth X Cercetați directorul curent, precum și toate subdirectoarele de la X niveluri de adâncime.
-iname Cercetați fără a ține cont de cazul textului.
-not Întoarceți numai rezultatele care nu corespund cazului de testare.
-type f Cercetați fișiere.
-type d Cercetați directoare.

Căutați fișiere în Linux în funcție de ora modificării folosind linia de comandă

Comanda find poate filtra o ierarhie de directoare pe baza datei la care un fișier a fost modificat ultima dată. De exemplu, următoarea comandă găsește orice fișier cu extensia .err care a fost modificat în ultimele 7 zile:

find / -name "*err" -mtime -7

Comanda de exemplu returnează următoarea ieșire:

 /home/username/directory_3/example.err/home/username/username/example.err/home/username/username/directory_2/example.err/home/username/username/directory_1/example.err/home/username/username/directory_1/subdirectory_1/example.err

Utilizați Grep pentru a găsi fișiere în Linux folosind linia de comandă

Comanda find poate filtra ierarhia directoarelor doar pe baza numelui și a metadatelor unui fișier. Dacă aveți nevoie să căutați pe baza conținutului fișierului, utilizați un instrument precumgrep. Luați în considerare următorul exemplu:

find . -type f -exec grep "test" '{}' \; -print

Această comandă caută fiecare obiect din ierarhia de directoare curentă (.) care este un fișier (-type f) și apoi execută comanda grep "test" pentru fiecare fișier care îndeplinește condițiile. Fișierele care corespund sunt tipărite pe ecran (-print). Parantezele ondulate ({}) reprezintă un spațiu rezervat pentru rezultatele căutării corespondenței. {} sunt cuprinse între ghilimele simple (') pentru a evita să se transmită grep un nume de fișier malformat. Comanda -exec se termină cu un punct și virgulă (;), care ar trebui să fie scăpat (\;) pentru a evita interpretarea de către shell.

Fileul folosit în exemplu (example.err) are un text în interiorul său care spune „test”. Când executați comanda de exemplu, veți vedea o ieșire similară:

 test./directory_3/example.errtest./example.errtest./directory_2/example.errtest./directory_1/example.errtest./directory_1/subdirectory_1/example.err

Grep a identificat fiecare fișier din directorul de lucru curent care conține șirul „test”.

Notă

Înainte de implementarea opțiunii -exec de către comanda find, ați putea genera o ieșire similară cu exemplul de mai sus folosind comanda xargs:

find . -type f -print | xargs grep "test"

Procesează și găsește fișiere folosind comanda Find în Linux

Opțiunea -exec execută comenzi împotriva fiecărui obiect care se potrivește cu expresia find. Luați în considerare următorul exemplu:

find . -name "example.err" -exec chmod o+r '{}' \;

Aceasta filtrează fiecare obiect din ierarhia curentă (.) pentru fișierele numite rc.conf și execută comanda chmod o+r pentru a modifica permisiunile de fișier ale rezultatelor comenzii find.

Comanda de exemplu rulează și execută opțiunea -exec în directorul rădăcină al procesului find. Utilizați -execdir pentru a executa comanda specificată în directorul în care se află meciul. Acest lucru poate atenua problemele de securitate și poate produce performanțe mai bune pentru anumite operații.

Opțiunile -exec sau -execdir se execută fără alte solicitări. Dacă preferați să vi se solicite înainte de a acționa, înlocuiți -exec cu -ok sau -execdir cu -okdir.

Cum să găsiți și să ștergeți fișiere utilizând linia de comandă Linux

Atenție

Utilizați această opțiune cu extremă precauție.

Adaugați opțiunea -delete la sfârșitul unei expresii de potrivire pentru a șterge toate fișierele care se potrivesc. Folosiți această opțiune atunci când sunteți sigur că rezultatele se potrivesc doar cu fișierele pe care doriți să le ștergeți.

În exemplul de mai jos, find localizează recursiv toate fișierele din ierarhie începând cu directorul curent și șterge toate fișierele care se termină cu extensia .err:

find . -name "*.err" -delete

Încă mai aveți câteva întrebări?

Alăturați-vă comunității noastre și postați întrebările dvs. pentru ca alți entuziaști Linode și Linux să vă ajute.

Întrebări conexe:

Lasă un răspuns

Adresa ta de email nu va fi publicată.