Cele mai bune 40 de exemple de comandă Find în Linux

Cuprins

Explorarea comenzii ‘find’ în Linux: Ghid detaliat și exemple practice

Comanda find din Linux este un instrument extrem de versatil, oferind administratorilor de sistem posibilitatea de a localiza și administra fișierele și directoarele, având la dispoziție o gamă largă de criterii de căutare. Cu ajutorul său, se pot identifica elemente după nume, tip, extensie, dimensiune, permisiuni și multe altele.

Dincolo de localizarea simplă, comanda find combinată cu alte comenzi permite acțiuni specifice asupra rezultatelor căutării. Utilizând opțiunea -exec, administratorii pot executa comenzi externe, realizând operații precum copierea, mutarea, ștergerea sau modificarea permisiunilor fișierelor care îndeplinesc criteriile specificate, fie că este vorba de dimensiune, nume sau alt criteriu.

În acest material, vom începe cu prezentarea comenzilor de bază ale find, însoțite de exemple practice, care vor ilustra procesul de identificare a fișierelor și directoarelor. Ulterior, vom explora modul în care opțiunea -exec poate fi utilizată pentru a efectua acțiuni asupra fișierelor sau directoarelor, în funcție de diverse caracteristici, cum ar fi dimensiunea sau permisiunile.

Sintaxa generală a comenzii find este:

find {cale} {nume_fisier_sau_director} {actiune}

Unde:

  • cale: specifică directorul în care se efectuează căutarea.
  • nume_fisier_sau_director: reprezintă denumirea exactă sau un pattern al fișierului sau directorului căutat.
  • actiune: definește operația care trebuie executată, cum ar fi copierea, ștergerea, mutarea, etc.

Acest ghid detaliază modul de localizare a fișierelor și directoarelor care se potrivesc unor pattern-uri specifice. De asemenea, vom examina cum se pot efectua acțiuni asupra entităților localizate de comanda find. Materialul este conceput pe baza distribuției Ubuntu, dar principiile prezentate sunt aplicabile majorității distribuțiilor și versiunilor Linux.

Localizarea fișierelor și directoarelor

Căutarea fișierelor după nume sau extensie

Pentru a identifica un fișier anume, executați următoarea comandă de la rădăcina sistemului (/). Comanda specifică numele exact al fișierului căutat.

find . -name file22.txt

Rezultat:

./test/file22.txt
./sales/file22.txt

Rețineți că rezultatele includ calea completă. Acest aspect este esențial, mai ales atunci când nu cunoașteți locația exactă a fișierului sau când acesta se află în mai multe locuri.

De asemenea, este posibilă căutarea fișierului într-un alt director, păstrând locația curentă. În acest caz, trebuie să specificați calea către directorul vizat pentru căutare.

find ./test -name file22.txt

Căutarea fișierelor într-un director specific

În exemplul nostru, vom căuta toate fișierele al căror nume începe cu „file”, aflate în directorul „test”.

find ./test -name file*

Rezultat:

./test/file22.txt
./test/file30.doc
./test/file1.txt
./test/file5,doc

Căutarea fișierelor după extensie

Pentru a localiza fișierele cu o anumită extensie, includeți aceasta în comandă.

find . -name *.txt

Rezultat:

./test/subtest/subfil.txt
./test/file22.txt
./test/file1.txt
./home1/files32.txt
./home2/file22.txt
./qa/tags.txt

Localizarea fișierelor și directoarelor după nume

Folosiți comanda de mai jos pentru a căuta fișiere și directoare care încep cu literele „qa”. În sistemul nostru, avem fișierele „qatree.txt” și „qa.txt”, precum și un director cu numele „qa”.

Executând comanda:

find ./ -name "qa*"

Se va returna următorul rezultat:

./test/qatree.pdf
./test/qa.txt
./home/qa

Comanda afișează atât fișierele, cât și directoarele care corespund criteriilor de căutare. Pentru a identifica doar fișiere sau directoare, trebuie să specificați acest lucru în comandă.

Localizarea doar a fișierelor sau a directoarelor

Pentru a localiza doar fișiere, folosiți opțiunea -type f.

Căutarea doar a fișierelor:

find ./ -type f -name "qa*"

Rezultat:

./test/qatree.pdf
./test/qa.txt

Pentru a localiza doar directoare, utilizați opțiunea -type d.

find ./ -type d -name "qa*"

Rezultat:

./home/qa

Căutarea independentă de majuscule/minuscule

Căutările care folosesc opțiunea -name sunt sensibile la majuscule și minuscule. Pentru a obține rezultate indiferent de acestea, utilizați opțiunea -iname.

find ./ -iname "qa*"

Rezultat:

./test/qatree.pdf
./test/qa.txt
./test/QAtest.txt
./home/qa

Căutarea unui fișier în mai multe directoare

Pentru a căuta fișiere în diverse directoare, includeți căile acestora în comandă. În exemplul nostru, vom căuta în directoarele „test” și „numeric”.

find ./test ./numeric -name file22.txt -type f

Rezultat:

./test/file22.txt
/root/numeric/file22.txt

Localizarea mai multor fișiere cu extensii diferite

Comanda find poate localiza simultan fișiere care au extensii variate, cum ar fi *.doc, *.txt, *.pdf, etc. Acest lucru se poate face fie separat, câte o extensie la un moment dat, fie printr-o singură comandă care specifică toate extensiile dorite.

find . -type f \( -name "*.txt" -o -name "*.pdf" -o -name "*.doc" \)

Rezultat:

./test/subtest/subfil.txt
./test/qatree.pdf
./test/file22.txt
./test/qa.txt
./test/file30.doc
./books/acro.pdf
./data1/FILE22.txt
./docs/files32.txt

Căutarea fișierelor care conțin un anumit text

Uneori, poate fi necesar să găsiți un fișier care conține un anumit text, dar al cărui nume sau locație nu le cunoașteți. Această comandă permite identificarea tuturor fișierelor care conțin textul țintă.

Pentru a căuta toate fișierele care conțin textul „hyperconvergence”, folosiți:

find / -type f -exec grep -l -i "hyperconvergence" {} ;

Rezultat:

/root/numeric/hci
/root/HCIP

Opțiunea -i permite comenzii să ignore diferențele dintre majuscule și minuscule, astfel încât textul să fie găsit indiferent de modul în care a fost scris.

Pentru a căuta fișierele într-un director specific, includeți calea acestuia în comandă:

find ./numeric -type f -exec grep -l -i "hyperconvergence" {} ;

Rezultat:

./numeric/hci

Pentru a afla mai multe despre comanda grep, explorați exemple suplimentare.

Căutarea fișierelor și directoarelor după dimensiune

Puteți localiza fișiere sau directoare care sunt mai mici, egale sau mai mari decât o anumită dimensiune, aflate într-un anumit interval de dimensiuni, sau goale. Folosiți formatul de dimensiune adecvat, în funcție de tipul de fișiere sau directoare căutate.

Opțiunile de dimensiune includ:

  • c – octeți
  • k – kiloocteți
  • M – Megaocteți
  • G – Gigabytes

Căutarea fișierelor cu o anumită dimensiune (ex. 30 MB)

Pentru a găsi toate fișierele care au exact 30 MB:

find / -size 30M

Căutarea fișierelor mai mari decât o dimensiune specificată (ex. 2MB)

find -size +2M

Rezultat:

./Downloads/ubuntu18043.iso
./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c

Căutarea fișierelor mai mici de 10MB în directorul curent

find . -type f -size -10M

Căutarea fișierelor cu dimensiuni între 100 și 200 MB

Atunci când se caută fișiere într-un interval de dimensiuni specific, precum între 100 și 200 MB:

find / -size +100M -size -200M

Căutarea directoarelor mai mari de 20 KB

find / -type d -size +20k

Căutarea fișierelor și directoarelor goale

Pentru fișiere goale:

find ./ -type f -size 0

sau

find ./ -type f –empty

Pentru directoare goale:

find ./ -type d –empty

Căutarea fișierelor după vechime sau timp de modificare

Pentru a localiza fișiere mai vechi de un anumit număr de zile:

find /path/ -type f -name '*.txt' -mtime +8

-mtime +8 va căuta fișiere .txt mai vechi de 8 zile.

Căutarea după data modificării

Aceasta va căuta fișierele care au fost modificate în ultimele 17 ore:

find . -mtime -17 -type f 

Pentru a căuta directoare modificate în ultimele 10 zile:

find . -mtime -10 -type d 

Căutarea fișierelor bazată pe acces sau modificare

Această funcționalitate vă permite să vizualizați fișierele care au fost sau nu au fost accesate într-o perioadă specificată.

Pentru a vedea fișierele care nu au fost accesate în ultimele 10 zile în directorul principal:

find /home -atime +10

Pentru a identifica fișierele accesate exact acum 10 zile:

find /home -atime 10

Pentru a identifica fișierele accesate în ultimele 10 zile:

find /home -atime -10

Căutarea fișierelor modificate în ultimele n zile

Pentru a căuta fișierele din directorul /home modificate în ultimele 10 zile, folosiți comanda:

find /home -mtime -10 

Căutarea fișierelor modificate într-o anumită perioadă

De exemplu, pentru a localiza toate fișierele din directorul principal, care au fost modificate între 6 și 15 zile în urmă:

find /home -type f -mtime +6 -mtime -15

Căutarea fișierelor și directoarelor accesate în ultimele 10 minute

Pentru a găsi fișierele care au fost accesate în ultimele 10 minute, utilizați opțiunea -amin.

find . -amin -10 -type f

Rezultat:

./.bash_history
./[email protected]:~#

Pentru a găsi directoarele care au fost accesate în ultimele 10 minute:

find . -amin -10 -type d

Căutarea fișierelor în funcție de permisiuni

Sintaxă:

find -perm mode

Unde mode reprezintă permisiunea, care poate fi numerică (ex. 644, 655, 700, 777) sau literală (ex. u=x, a=r+x).

Modul poate fi specificat în trei moduri distincte:

  • Fără prefix, pentru a găsi fișierele care au exact permisiunile specificate.
  • Cu - pentru a găsi fișierele care au cel puțin permisiunea specificată. Comanda va returna fișierele cu permisiunile specificate, precum și cele cu permisiuni suplimentare, mai mari.
  • Cu /, este necesar să se specifice proprietarul sau grupul cu permisiunea la fișier.

Găsirea fișierelor cu permisiunea 777

find -perm 777

Rezultat:

./file1

Găsirea fișierelor cu cel puțin permisiunea 766:

find -perm -766

Rezultat:

./file2
./file1

Comanda caută toate fișierele în care:

  • Proprietarul fișierului are permisiuni de citire, scriere și execuție.
  • Grupul are permisiuni de citire și scriere.
  • Alții au permisiunea de citire și scriere.

Astfel, sunt returnate două fișiere care îndeplinesc aceste criterii: „file1” și „file2”. Fișierele nu trebuie să aibă exact permisiunile 766, dar trebuie să aibă cel puțin aceste permisiuni specificate.

Găsirea fișierelor care pot fi scrise de proprietar

Vom utiliza acum / pentru a căuta fișiere care pot fi scrise fie de proprietarul lor, fie de grup, sau de alții:

find -perm /222

Rezultat:

.
./file2
./file3
./file1

Comanda de mai sus caută fișierele care pot fi scrise de proprietar, grup sau alții. Aceasta returnează fișierele care pot fi scrise de oricare dintre aceste categorii, dar nu neapărat de toate. Pentru a vizualiza fișierele în care ambele (proprietar și grup) au permisiuni de scriere, folosiți prefixul -:

find -perm -220

Rezultat:

./file2
./file1

Găsirea fișierelor deținute de un anumit utilizator

Pentru a localiza toate fișierele deținute de utilizatorul „jack”:

find /home -user jack

Rezultat:

/home/jack
/home/jack/examples.desktop
/home/jack/.gnupg
/home/jack/.gnupg/private-keys-v1.d
/home/jack/ans.cgi

Găsirea anumitor tipuri de fișiere deținute de un anumit utilizator

Pentru a localiza toate fișierele text deținute de utilizatorul „jack”:

find /home -user jack -iname "*.txt"

Rezultat:

/home/jack/docs/file32.txt

Găsirea și listarea fișierelor și directoarelor împreună cu permisiunile acestora

find -name "*.conf" | ls -l

Rezultat:

total 120
drwxr-xr-x 2 root root 4096 Dec 31 13:19 backup2
drwxr-xr-x 2 root root 4096 Jan 4 11:57 Desktop
drwxr-xr-x 2 root root 4096 Dec 31 11:50 Documents
drwxr-xr-x 2 root root 4096 Dec 31 12:27 Downloads
-rw-r--r-- 1 root root 0 Jan 4 12:02 file22.doc
drwxr-xr-x 2 root root 4096 Jan 4 12:14 file23
-rw-r--r-- 1 root root 0 Jan 4 12:23 file23.txt

Găsirea și acționarea asupra rezultatelor

În această secțiune, vom examina cum se pot executa acțiuni asupra fișierelor care se potrivesc cu pattern-urile specificate în comanda find.

Găsirea fișierelor și modificarea permisiunilor

Pentru a identifica și modifica permisiunile anumitor tipuri de fișiere. Vom lucra cu fișiere PHP care au permisiuni diferite, după cum se poate vedea mai jos.

[email protected]:~/ver$ ls -la

total 8
drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 .
drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 ..
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php
-rw-rw-r-- 1 jack jack 0 Jan 3 14:11 base.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php
-rw-rw-r-- 1 jack jack 0 Jan 3 14:11 qust.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php
-rw-rw-r-- 1 jack jack 0 Jan 3 14:11 vary.php

Vom căuta toate fișierele PHP și le vom schimba permisiunile în 755:

find ver -name "*.php" -type f -exec chmod 755 {} ;

Această comandă caută fișierele PHP în directorul „ver” și le setează permisiunile la 755 (rwxr-xr-x).

Rezultatul:

[email protected]:~/ver$ ls -la
total 8
drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 .
drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 ..
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:11 base.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:11 qust.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:11 vary.php

Găsirea și modificarea permisiunilor pentru fișiere și directoare

Pentru a găsi fișierele cu permisiunile 644 și a le modifica în 655:

find . -type f -perm 644 -exec chmod 655 {} ;

De asemenea, se pot căuta directoarele cu permisiunile 644 și a le înlocui cu 755:

find . -type d -perm 644

Rezultat:

./docs

Dosarul „docs” are permisiunile 644:

drwxrwxr-x 2 jack jack 4096 Jan 3 12:45 docs

Pentru a le seta la 755, executăm:

find . -type d -perm 644 -exec chmod 755 {} ;

Acum putem verifica din nou pentru a vedea ce anume 755:

find . -type d -perm 755

Rezultat:

.
./docs

Se poate observa că atât directoarele rădăcină, cât și „docs” au permisiunile 755.

Comanda ls -la oferă următoarele detalii:

drwxr-xr-x 2 jack jack 4096 Jan 3 12:45 docs

Găsirea și copierea fișierelor sau a directoarelor

Pentru a găsi și copia un fișier anume într-un director:

Comanda de mai jos va localiza fișierul „file22.txt” și îl va copia în directorul ~/tmp/images:

find -iname file22.txt -exec cp {} ~/tmp/images ;

Pentru a găsi și copia un tip de fișiere într-un director:

Pentru a găsi fișierele de tip imagine cu extensia .jpg în directorul curent și a le copia într-o locație diferită, cum ar fi un folder de imagini:

find -iname '*.jpg' -exec cp {} ~/tmp/images ;

Această comandă va găsi și copia toate fișierele .jpg în folderul ~/tmp/images.

Găsirea și copierea unui fișier în mai multe directoare

Pentru a localiza și copia un singur fișier în mai multe directoare:

find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {} ;

Comanda de mai sus va găsi fișierul „hci” și îl va copia în cele trei directoare /tmp/dir1/, /tmp/dir2/ și $HOME/3/.

Găsirea și mutarea fișierelor într-un alt director

Pentru a muta un fișier cunoscut dintr-un director în altul. De exemplu, pentru a muta fișierul universal.php:

find ~/folder/ -type f -name universal.php -exec mv {} ~/numeric/ ;

Pentru a căuta și muta fișierele cu o anumită extensie într-un folder diferit:

find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/ ;

Găsirea anumitor fișiere și mutarea lor într-un folder specific

find -type f -name uni*.* -exec mv {} ~/unifiles/ ;

Această comandă va căuta toate fișierele ale căror nume încep cu „uni” și care au orice extensie și le va muta în directorul /unifiles/.

Găsirea și mutarea fișierelor în funcție de vechime

Pentru a găsi și muta fișierele mai vechi de un anumit număr de zile într-o altă locație, cum ar fi un folder de arhivă:

find /path/ -type f -name '*.pdf' -mtime +20 -exec mv {} /backup1/ ;

Această comandă va căuta fișierele .pdf mai vechi de 20 de zile și le va muta în directorul „backup1”.

Găsirea și ștergerea fișierelor și directoarelor

Sintaxa pentru găsirea și ștergerea fișierelor sau directoarelor din directorul curent este:

Pentru a șterge doar fișiere:

find . -type f -name "fisier_de_sters" -exec rm -f {} ;

Pentru a șterge doar directoare:

find . -type d -name "director_de_sters" -exec rm -rf {} ;

Găsirea și ștergerea anumitor fișiere

Pentru a găsi și șterge fișierele al căror nume începe cu „til”, utilizați:

find . -type f -name "til*" -exec rm {} ; 

Pentru a găsi și șterge directoarele al căror nume începe cu „til”:

find . -type d -name "til*" -exec rm {} ;

Ștergerea atât a fișierelor, cât și a directoarelor

find . -name "til*" -exec rm -rf {} ; 

Această comandă va șterge atât fișierele, cât și directoarele al căror nume începe cu literele „til”.

Ștergerea după extensie

Mai jos este modalitatea de a localiza și șterge toate fișierele .txt din directorul curent. Înlocuiți txt cu o altă extensie, cum ar fi bak, pdf sau orice altă extensie pe care doriți să o eliminați.

find . -type f -name "*.txt" -exec rm -f {} ;

În cazul în care doriți ca sistemul să vă solicite să confirmați înainte de a șterge fiecare fișier, adăugați opțiunea -i:

find . -type f -name "*.txt" -exec rm -i {} ;

Rezultat:

rm: remove regular empty file './File22.txt'? y
rm: remove regular empty file './file22.txt'? y
rm: remove regular empty file './file23.txt'?

În mod implicit, rm nu va elimina directoarele, și este necesară utilizarea opțiunii -r pentru a asigura o ștergere recursivă. Aceasta asigură ștergerea directoarelor, indiferent dacă sunt goale sau conțin fișiere. Opțiunea -f forțează eliminarea și este utilizată atât pentru fișiere, cât și pentru directoare.

Găsirea și ștergerea fișierelor mai vechi de n zile

Pentru a găsi și șterge fișierele de backup mai vechi de 20 de zile din directorul curent:

find . -type f -name '*.bak' -mtime +20 -exec rm {} ;

Această comandă va șterge toate fișierele .bak mai vechi de 20 de zile.

Găsirea și ștergerea doar a directoarelor

Pentru a șterge un director numit „dir22”:

find . -type d -name dir22 -exec rm -rf {} ;

Asigurați-vă că respectați majusculele și minusculele numelui directorului, sau folosiți opțiunea -iname:

find . -type d -iname Dir22 -exec rm -rf {} ;

Această comandă va șterge atât Dir22, cât și dir22.

Pentru a solicita confirmarea înainte de ștergere, utilizați opțiunea -i:

find . -type d -iname Dir22 -exec rm -rf -i {} ;

Rezultat:

rm: remove directory "./Dir22"?  n
rm: remove directory "./dir22"?  y

În acest exemplu, am introdus „n” pentru directorul Dir22, care nu va fi șters, și „y” pentru dir22, care va fi eliminat.

Găsirea și ștergerea fișierelor goale

Puteți folosi oricare dintre următoarele comenzi pentru a localiza fișierele goale și a le șterge automat:

find ./ -type f -size 0 -exec rm -f {} ;

sau

find ./ -type f -size 0 | xargs rm -f

sau

find ./ -type f -size 0 --delete

Găsirea și ștergerea directoarelor goale

Pentru a elimina directoarele goale, vom folosi opțiunea d:

find ./ -type d -empty -exec rmdir {} ;

O altă alternativă este utilizarea opțiunii -delete în loc de -