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

Comanda Linux find este un instrument puternic care permite administratorilor de sistem să localizeze și să gestioneze fișiere și directoare pe baza unei game largi de criterii de căutare. Poate găsi directoare și fișiere după nume, tip sau extensie, dimensiune, permisiuni etc.

Pe lângă localizarea fișierelor și directoarelor, combinarea comenzii find cu altele vă permite să luați măsuri asupra rezultatelor. Adăugarea opțiunii -exec permite administratorilor de sistem să execute comenzi externe și să efectueze acțiuni precum copierea, mutarea, ștergerea sau modificarea permisiunilor fișierelor care corespund criteriilor specificate, cum ar fi dimensiunea, numele etc.

În acest articol, vom începe prin a explica comenzile de bază Linux find cu exemple. Aceasta vă va arăta cum să găsiți fișiere și directoare. Vă vom arăta apoi cum să utilizați opțiunea -exec pentru a acționa asupra fișierelor sau directoarelor în funcție de dimensiunea, permisiunile, etc.

Sintaxa generală pentru comanda find este

find {path} {name -of-file or dir-to-search} {action-to-take}

Unde,

  • calea specifică directorul.
  • name-of file sau dir-to-search : numele fișierului sau directorului de căutat
  • acțiune de luat: cum ar fi copierea, ștergerea, mutarea etc.

În acest tutorial, vom explica cum să localizați fișierele și directoarele care se potrivesc cu modelele specificate. Vom vedea, de asemenea, cum să efectuăm acțiuni asupra fișierelor sau directoarelor pe care le localizează comanda find. Ghidul se bazează pe Ubuntu, dar este aplicabil la majoritatea distribuțiilor și versiunilor Linux.

Cuprins

Găsiți fișiere și directoare

Găsiți anumite fișiere după nume sau extensie

Pentru a căuta un anumit fișier, executați următoarea comandă de la rădăcină (/). Comanda conține numele exact pentru fișierul pe care îl căutați.

find . -name file22.txt

Ieșire

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

Vă rugăm să rețineți că rezultatele includ calea. Acest lucru este important dacă nu cunoașteți directorul în care se află fișierul sau când acesta se află în mai multe locuri.

De asemenea, puteți căuta fișierul într-un alt director în timp ce încă vă aflați în locația curentă. În acest caz, trebuie să furnizați calea pentru directorul în care doriți să căutați.

find ./test -name file22.txt

Căutați anumite fișiere într-un alt director

În cazul nostru, le vom căuta pe toate cele care încep cu fișierul cu litere în directorul de testare.

find ./test -name file*

Ieșire

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

Căutați fișiere după extensie

Pentru a găsi un fișier în Linux cu o anumită extensie, adăugați-l la comandă.

find . -name *.txt

Ieșire

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

Găsiți fișiere și directoare după nume

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

  Cum să configurați un computer Linux prietenos cu copiii

Dacă rulăm comanda;

find ./ -name "qa*"

Returnează următoarea ieșire

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

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

Găsiți numai fișiere sau directoare

Numai pentru fișiere, utilizați comutatorul de tip f.

Numai fișiere

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

Ieșire

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

Numai directoare

Adăugați opțiunea de tip d pentru a localiza numai directoare.

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

Ieșire

./home/qa

Comandă de căutare care nu ține seama de majuscule

Toate căutările cu comutatorul -name sunt sensibile la majuscule și nu vor da rezultate cu majuscule. Pentru a obține toate cazurile, utilizați opțiunea -iname.

find ./ -iname "qa*"

Ieșire

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

Căutați un fișier din mai multe directoare

Pentru a găsi fișierele în diferite directoare, adăugați căile acestora în comandă. În cazul nostru, vom verifica în directoarele de testare și numerice.

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

Ieșire

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

Găsiți mai multe fișiere cu extensii diferite din toate directoarele

Puteți utiliza comanda find pentru a localiza mai multe fișiere care partajează diferite extensii, cum ar fi *.doc, *.txt *.pdf etc. Acest lucru se poate face separat, câte o extensie la un moment dat, sau folosind o singură comandă care include toate extensiile dorite.

găsi . -type f ( -nume „*.txt” -o -nume „*.pdf” -o -nume „*.doc” )

ieșire

./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

Găsiți fișiere care conțin un anumit text

Uneori, doriți să accesați un fișier care conține un anumit text, dar nu vă puteți aminti numele sau locația acestuia. Această comandă vă permite să găsiți toate fișierele care conțin textul țintă.

Pentru a căuta toate fișierele care conțin cuvântul hiperconvergență”, folosește;

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

Ieșire

/root/numeric/hci
/root/HCIP

Opțiunea –i permite comenzii să ignore cazurile și va găsi textul indiferent dacă este scris cu majuscule sau nu, adică hiperconvergență, hiperconvergență etc.

Pentru a căuta fișierele într-un anumit director, pur și simplu adăugați-le la comandă

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

Ieșire

./numeric/hci

Explorați mai multe exemple de comandă grep.

Găsiți fișiere și directoare în funcție de dimensiune

Puteți găsi toate fișierele sau directoarele care sunt mai mici, egale sau mai mari decât o anumită dimensiune, într-un anumit interval sau goale. Utilizați formatul de dimensiune adecvat, în funcție de tipul de fișiere sau directoare pe care le căutați.

Opțiunile de dimensiune includ;

c – octeți

k – kiloocteți

M – Megaocteți

G – Gigabytes

Găsiți fișiere de o anumită dimensiune – egală cu 30 MB

Pentru a căuta, găsiți toate fișierele de 30 MB

find / -size 30M

Găsiți fișiere mai mari decât o dimensiune specificată

find -size +2M

Ieșire

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

Găsiți fișiere mai mici de 10 MB în directorul curent

find . -type f -size -10M

Găsiți fișiere cu dimensiuni între 100-200 MB

Când căutați fișiere într-un interval specific, cum ar fi între 100 și 200 MB

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

Căutați directoare mai mari de 20 kb

găsi / -type d -size +20k

Găsiți fișiere și directoare goale.

Fișiere

găsiți ./ -tip f -dimensiunea 0

sau

find ./ -type f –empty

Directoare

find ./ -type d –empty

Găsiți fișiere după vârstă sau timp de modificare

Găsiți fișiere mai vechi de n zile

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

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

După data modificării

Aceasta va căuta fișiere modificate în ultimele 17 ore

find . -mtime -17 -type f 

Caută directoare modificate în ultimele 10 zile

find . -mtime -10 -type d 

Găsiți fișiere pe baza accesului sau modificării

Găsiți fișiere pe baza datei sau orei accesate. Acest lucru vă permite să vedeți fișierele care au fost sau nu au fost accesate într-o perioadă specificată.

  Cum să curățați și să accelerați Arch Linux

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

find /home -atime +10

Fișiere accesate cu exact 10 zile în urmă

find /home -atime 10

Accesat în ultimele 10 zile

find /home -atime -10

Găsiți fișiere modificate în ultimele n zile

De asemenea, puteți căuta fișierele din directorul /home modificate în ultimele 10 zile folosind comanda;

find /home -mtime -10 

Găsiți fișiere modificate într-o anumită perioadă.

De exemplu, toate fișierele modificate între 6 și 15 zile în urmă în directorul principal.

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

Fișiere și directoare accesate în ultimele 10 minute

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

find . -amin -10 -type f

Ieșire

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

Directoare accesate în ultimele 10 minute

find . -amin -10 -type d

Găsiți fișiere care se potrivesc cu anumite permisiuni

Sintaxă

$ find -perm mode

Unde modul este permisiunea care este fie numerică, cum ar fi 644, 655, 700, 777 etc., fie litere precum u=x, a=r+x etc.

Puteți specifica modul în următoarele trei moduri diferite.

  • Fără un prefix atunci când doriți să găsiți fișiere cu permisiunile exacte specificate.
  • Cu „-“ pentru fișierele cu cel puțin permisiunea specificată. Aceasta returnează fișierele cu permisiunile specificate, precum și cu permisiunile suplimentare superioare.
  • Folosirea „/” necesită specificarea proprietarului sau a grupului cu permisiunea la fișier.
  • Găsiți fișiere cu permisiunea 777

    find -perm 777

    Ieșire

    ./file1

    Găsiți fișiere cu cel puțin 766
    găsi -perm -766

    Ieșire

    ./file2
    ./file1

    Comanda caută toate fișierele în care

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

    Ca atare, returnează două fișiere care îndeplinesc acest criteriu – fișier1 și fișier2. Fișierele nu trebuie să aibă permisiunile exacte 766 și pot avea altele suplimentare cât timp, dar trebuie să aibă cel puțin permisiunile specificate.

    Găsiți fișiere care pot fi scrise de proprietar

    Vom folosi 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
    .
    ./file2
    ./file3
    ./file1

    Cele de mai sus caută fișiere care pot fi scrise fie de proprietar, fie de grup.
    Aceasta returnează fișierele care pot fi scrise de oricare, dar nu neapărat de ambele. Pentru a vedea fișierele, în care ambele au permisiuni de scriere, utilizați prefixul –.

    find -perm -220

    Ieșire

    ./file2
    ./file1

    Găsiți fișiere deținute de un utilizator

    Găsiți toate fișierele deținute de Jack

    find /home -user jack

    Ieșire

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

    Găsiți anumite fișiere deținute de un utilizator

    Găsiți toate fișierele text deținute de Jack

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

    Ieșire

    /home/jack/docs/file32.txt

    Găsiți și enumerați fișierele și directoarele împreună cu permisiunile acestora

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

    Ieșire

    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ăsiți și acționați în funcție de rezultate

    În această secțiune, vom analiza cum puteți acționa asupra fișierelor care se potrivesc cu modelul specificat în comanda find.

    Găsiți fișiere și modificați permisiunile

    Găsiți și modificați permisiunile anumitor tipuri de fișiere. În cazul nostru, vom lucra cu fișiere PHP cu permisiuni diferite, așa cum se arată 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 acum toate fișierele PHP (mai sus) și le vom înlocui permisiunile cu 755

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

    Comanda caută fișiere PHP în directorul ver și apoi setează permisiunea lor la 755 (rwxr-xr-x)

    Rezultate

    [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ăsiți și modificați permisiunile pentru fișiere și directoare

    Găsiți fișiere cu 644 de permisiuni și modificați-le pentru a avea 655 de permisiuni

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

    De asemenea, puteți căuta directoare cu permisiuni 644 și le puteți înlocui cu 755.

    find . -type d -perm 644

    Ieșire

    ./docs   

    Dosarul de documente are 644 de permisiuni

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

    Pentru a-l seta la 755, rulă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

    Ieșire
    .
    ./docs

      Cum să curățați și să accelerați Arch Linux

    De sus putem vedea că directoarele rădăcină ș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ăsiți și copiați fișiere sau directoare

    Găsiți și copiați un anumit fișier într-un director

    Comanda de mai jos va găsi fișierul file22.txt și îl va copia în directorul ~/tmp/images.

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

    Găsiți și copiați un tip de fișiere într-un director

    Pentru a găsi fișiere precum imagini cu extensia jpg în directorul curent și a le copia într-o locație diferită, cum ar fi un folder de imagini, utilizați;

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

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

    Găsiți și copiați un fișier în mai multe directoare

    Găsiți și copiați un singur în mai multe directoare.

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

    Acesta va găsi fișierul fișierul hci și îl va copia în cele trei directoare ale /tmp/dir1/ /tmp/dir2/ și $HOME/3/

    Găsiți și mutați fișiere într-un alt director

    Pentru a muta un fișier cunoscut dintr-un director în altul. Pentru a muta fișierul universal.php;

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

    Căutați și mutați fișiere cu o anumită extensie într-un folder diferit

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

    Găsiți anumite fișiere și mutați-vă într-un anumit folder diferit

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

    Comanda caută toate fișierele cu nume care încep cu uni și care au orice extensie. Apoi le mută în directorul /unifiles/

    Găsiți și mutați fișiere în funcție de vârstă

    Găsiți și mutați fișierele mai vechi decât zilele specificate într-o altă locație, cum ar fi arhiva.

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

    Aceasta va căuta fișiere pdf mai vechi de 20 de zile și le va muta în directorul backup1.

    Găsiți și ștergeți fișiere și directoare

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

    găsi . -type f -name „fișier de șters” -exec rm -f {} ; pentru a șterge numai fișiere sau

    găsi . -type d -name „dir-to-delete” -exec rm -rf {} ; pentru a șterge numai directoare

    Găsiți și ștergeți numai anumite fișiere

    Pentru a găsi și șterge fișiere care încep cu til, utilizați;

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

    Pentru a găsi și șterge directoare care încep cu til

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

    Eliminați atât fișierele, cât și directoarele

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

    Acest lucru va elimina atât fișierele, cât și directoarele care încep cu literele til.

    Ștergeți prin extensie

    Mai jos este cum puteți localiza și șterge toate fișierele txt din directorul curent. Înlocuiți txt-ul cu o altă extensie, cum ar fi bak, pdf sau orice alta 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 ca mai jos.

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

    Ieșire

    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 trebuie să utilizați opțiunea –r pentru a asigura o eliminare recursivă. Acest lucru asigură ștergerea directoarelor goale și a celor care conțin fișiere. Opțiunea -f forțează eliminarea și este utilizată atât pentru fișiere, cât și pentru directoare.

    Găsiți și ștergeți fișierele mai vechi de n zile

    Găsiți și ștergeți fișierele de rezervă mai vechi de 20 de zile din directorul curent.

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

    Aceasta va șterge toate fișierele .bak mai vechi de 20 de zile.

    Găsiți și ștergeți numai directoare

    Pentru a șterge un director numit dir22

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

    Asigurați-vă că potriviți majusculele numelui directorului sau utilizați opțiunea -iname.

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

    Elimină atât Dir22, cât și dir22

    Pentru a confirma înainte de ștergere, utilizați opțiunea -i.

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

    Ieșire
    rm: eliminați directorul „./Dir22”? n
    rm: eliminați directorul „./dir22”? y

    În cazul nostru, am tastat n pentru directorul Dir22 care nu va fi șters și y pentru dir22 care va fi acum eliminat.

    Găsiți și eliminați fișierele goale

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

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

    sau
    găsi ./ -tip f -size 0 | xargs rm -f
    sau
    găsi ./ -type f -size 0 –delete

    Găsiți și eliminați directoarele goale

    Pentru a elimina directoarele goale vom folosi opțiunea d.

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

    O altă alternativă este să folosiți ștergeți în loc de eliminați.

    find ./ -type d -empty -delete

    Vă rugăm să rețineți că ștergerea fișierelor de sistem sau critice de pe computer poate deteriora sistemul de operare sau aplicațiile sau poate duce la pierderea datelor dvs. importante.

    Pentru a evita ștergerile accidentale, este cea mai bună practică să utilizați un cont de utilizator non-root. De asemenea, asigurați-vă că ștergeți fișierele corecte care nu sunt utile și că aveți o copie de rezervă a tuturor fișierelor de date pentru orice eventualitate.

    Ce urmeaza?

    Continuați și încercați comenzile Linux find de mai sus în laboratorul dvs. sau în mediul NON PRODUCTION. Vedeți dacă puteți folosi unele pentru a automatiza curățarea sistemului de fișiere cu Crontab. Și, pentru a stăpâni Linux, verifică asta curs online.