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
- Comandă și sintaxă comună de căutare Linux
- Căutarea unui fișier în Linux folosind numele de fișier
- Căutați un fișier în directorul curent folosind comanda Find
- Căutarea fișierelor imagine în Linux utilizând linia de comandă
- Căutați un fișier gol în directorul dvs. utilizând linia de comandă
- Opțiuni și optimizări pentru căutarea fișierelor în Linux utilizând linia de comandă
- Căutați fișiere în Linux în funcție de ora modificării folosind linia de comandă
- Utilizați Grep pentru a găsi fișiere în Linux folosind linia de comandă
- Procesează și găsește fișiere folosind comanda Find în Linux
- Cum să găsiți și să ștergeți fișiere utilizând linia de comandă Linux
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 procesuluifind
. - Atributul
starting/path
definește directorul de nivel superior în carefind
î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 comandafind
, ați putea genera o ieșire similară cu exemplul de mai sus folosind comandaxargs
: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: