40 најбољих примера команде Финд у Линуку

Преглед садржаја

Linux komanda `find` je izuzetno koristan alat koji omogućava administratorima sistema da lociraju i upravljaju datotekama i direktorijumima na osnovu različitih kriterijuma pretrage. Može da identifikuje direktorijume i datoteke prema njihovom nazivu, vrsti ili ekstenziji, veličini, dozvolama i drugim parametrima.

Pored samog pronalaženja datoteka i direktorijuma, kombinovanjem komande `find` sa drugim komandama, omogućeno je preduzimanje akcija nad rezultatima. Dodavanjem opcije `-exec`, administratori sistema mogu pokretati spoljne komande i izvršavati radnje poput kopiranja, premeštanja, brisanja ili promene dozvola za datoteke koje odgovaraju definisanim kriterijumima, kao što su veličina, ime i slično.

U ovom tekstu, prvo ćemo objasniti osnovne primere upotrebe Linux komande `find`, koji će vam pokazati kako da pronađete datoteke i direktorijume. Zatim ćemo demonstrirati kako koristiti opciju `-exec` za primenu različitih akcija na datoteke ili direktorijume na osnovu njihovih karakteristika kao što su veličina ili dozvole.

Opšta sintaksa za komandu `find` izgleda ovako:

find {putanja} {ime-datoteke-ili-direktorijuma} {akcija-koju-treba-izvršiti}

Gde:

  • `putanja` specificira direktorijum u kojem se vrši pretraga.
  • `ime-datoteke-ili-direktorijuma` je naziv datoteke ili direktorijuma koji se traži.
  • `akcija-koju-treba-izvršiti` je radnja koja se primenjuje na pronađene stavke, na primer kopiranje, brisanje ili premeštanje.

U ovom vodiču ćemo detaljno objasniti kako pronaći datoteke i direktorijume koji odgovaraju navedenim uzorcima. Takođe ćemo istražiti kako izvršiti različite radnje nad datotekama ili direktorijumima koje komanda `find` pronađe. Ovaj vodič je baziran na Ubuntu sistemu, ali je primenjiv na većinu Linux distribucija i verzija.

Pronalaženje datoteka i direktorijuma

Pronalaženje specifičnih datoteka po imenu ili ekstenziji

Da biste pronašli određenu datoteku, izvršite sledeću komandu iz root direktorijuma (`/`). Komanda specificira tačno ime datoteke koju tražite.

find . -name file22.txt

Izlaz:

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

Napominjemo da rezultati uključuju putanju. Ovo je posebno korisno ako ne znate tačnu lokaciju datoteke ili kada se datoteka nalazi na više mesta.

Takođe, možete tražiti datoteku u drugom direktorijumu dok ste i dalje u trenutnoj lokaciji. U tom slučaju, potrebno je da specificirate putanju do direktorijuma u kom želite da pretražujete.

find ./test -name file22.txt

Pretraga specifičnih datoteka u drugom direktorijumu

U ovom primeru, tražićemo sve datoteke koje počinju određenim slovima u direktorijumu za testiranje.

find ./test -name file*

Izlaz:

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

Pretraga datoteka po ekstenzijama

Da biste pronašli datoteku u Linuxu sa određenom ekstenzijom, dodajte je u komandu.

find . -name *.txt

Izlaz:

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

Pronalaženje datoteka i direktorijuma po imenu

Koristite sledeću komandu da potražite datoteke i direktorijume koji počinju slovima `ka`. Na našem računaru imamo datoteke `katree.txt` i `ka.txt`, kao i direktorijum pod nazivom `ka`.

Ako pokrenemo komandu:

find ./ -name "qa*"

Dobićemo sledeći izlaz:

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

Komanda vraća i datoteke i direktorijume koji odgovaraju kriterijumima pretrage. Da biste pronašli samo datoteke ili samo direktorijume, potrebno je da to specificirate u komandi.

Pronalaženje samo datoteka ili direktorijuma

Za pretragu samo datoteka, koristite opciju `-type f`.

Samo datoteke:

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

Izlaz:

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

Samo direktorijumi:

Dodajte opciju `-type d` da biste locirali samo direktorijume.

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

Izlaz:

./home/qa

Komanda `find` ne razlikuje velika i mala slova

Sve pretrage sa opcijom `-name` su osetljive na velika i mala slova i neće davati rezultate ako se ne poklapa velika i mala slova. Da biste dobili sve slučajeve, koristite opciju `-iname`.

find ./ -iname "qa*"

Izlaz:

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

Pretraga datoteka iz više direktorijuma

Da biste pronašli datoteke u različitim direktorijumima, dodajte njihove putanje u komandu. U ovom slučaju ćemo pretraživati u `test` i `numeric` direktorijumima.

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

Izlaz:

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

Pronalaženje više datoteka sa različitim ekstenzijama iz svih direktorijuma

Možete koristiti komandu `find` da locirate više datoteka koje dele različite ekstenzije kao što su `*.doc`, `*.txt`, `*.pdf`, itd. Ovo se može uraditi pojedinačno, jedna po jedna ekstenzija, ili korišćenjem samo jedne komande koja uključuje sve željene ekstenzije.

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

Izlaz:

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

Pronalaženje datoteka koje sadrže određeni tekst

Ponekad je potrebno da pristupite datoteci koja sadrži određeni tekst, ali ne možete da se setite njenog naziva ili lokacije. Ova komanda omogućava da pronađete sve datoteke koje sadrže vaš ciljni tekst.

Da biste potražili sve datoteke koje sadrže reč „hyperconvergence“, koristite:

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

Izlaz:

/root/numeric/hci
/root/HCIP

Opcija `-i` omogućava komandi da ignoriše velika i mala slova i pronalazi tekst bez obzira da li je napisan velikim ili malim slovima, npr. hyperconvergence, Hyperconvergence, itd.

Da biste tražili datoteke u određenom direktorijumu, jednostavno ih dodajte u komandu:

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

Izlaz:

./numeric/hci

Istražite više primera komandi `grep`.

Pronalaženje datoteka i direktorijuma na osnovu veličine

Možete pronaći sve datoteke ili direktorijume koji su manji, jednaki ili veći od određene veličine, unutar određenog opsega, ili one koji su prazni. Koristite odgovarajući format veličine u zavisnosti od tipa datoteka ili direktorijuma koje tražite.

Opcije za veličinu uključuju:

c – bajtovi

k – kilobajti

M – megabajti

G – gigabajti

Pronalaženje datoteka određene veličine – jednake 30 MB

Za pretragu svih datoteka veličine 30 MB:

find / -size 30M

Pronalaženje datoteka većih od određene veličine

find -size +2M

Izlaz:

./Downloads/ubuntu18043.iso
./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f4143050577a9c

Pronalaženje datoteka manjih od 10 MB u trenutnom direktorijumu

find . -type f -size -10M

Pronalaženje datoteka veličine između 100-200 MB

Kada tražite datoteke unutar određenog opsega, na primer između 100 i 200 MB:

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

Pretraga direktorijuma većih od 20 KB

find / -type d -size +20k

Pronalaženje praznih datoteka i direktorijuma

Datoteke:

find ./ -type f -size 0

ili

find ./ -type f --empty

Direktorijumi:

find ./ -type d --empty

Pronalaženje datoteka prema starosti ili vremenu izmene

Pronalaženje datoteka starijih od n dana:

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

`-mtime +8` će tražiti tekstualne datoteke koje su starije od 8 dana.

Prema datumu izmene

Ovo će tražiti datoteke koje su izmenjene u poslednjih 17 sati:

find . -mtime -17 -type f

Traži direktorijume koji su izmenjeni u poslednjih 10 dana:

find . -mtime -10 -type d

Pronalaženje datoteka na osnovu pristupa ili modifikacije

Pronalaženje datoteka na osnovu datuma ili vremena pristupa. Ovo vam omogućava da vidite datoteke kojima se pristupalo ili kojima se nije pristupalo u određenom periodu.

Da biste videli datoteke kojima nije pristupljeno u poslednjih 10 dana u home direktorijumu:

find /home -atime +10

Datotekama je pristupljeno pre tačno 10 dana:

find /home -atime 10

Pristupljeno u poslednjih 10 dana:

find /home -atime -10

Pronalaženje datoteka izmenjenih u poslednjih n dana

Takođe možete potražiti datoteke u `/home` direktorijumu izmenjene u poslednjih 10 dana koristeći sledeću komandu:

find /home -mtime -10

Pronalaženje datoteka izmenjenih u određenom periodu

Na primer, sve datoteke izmenjene između 6 i 15 dana u home direktorijumu:

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

Datoteke i direktorijumi kojima je pristupljeno u poslednjih 10 minuta

Da biste pronašli datoteke kojima je pristupljeno u poslednjih 10 minuta, koristite opciju `-amin`.

find . -amin -10 -type f

Izlaz:

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

Direktorijumima je pristupljeno u poslednjih 10 minuta:

find . -amin -10 -type d

Pronalaženje datoteka koje odgovaraju određenim dozvolama

Sintaksa:

find -perm mode

Gde je `mode` dozvola koja je ili numerička, kao što su 644, 655, 700, 777, itd., ili slovna, kao što su `u=x`, `a=r+x`, itd.

Dozvolu možete specificirati na sledeća tri različita načina:

  • Bez prefiksa, kada želite da pronađete datoteke sa tačno specificiranim dozvolama.
  • Sa `-` za datoteke sa najmanje specificiranom dozvolom. Ovo vraća datoteke sa specificiranim, kao i dodatnim, višim dozvolama.
  • Korišćenjem `/` zahteva navođenje vlasnika ili grupe sa dozvolom za datoteku.
  • Pronalaženje datoteka sa dozvolom 777

    find -perm 777

    Izlaz:

    ./file1

    Pronalaženje datoteka sa najmanje 766:
    find -perm -766

    Izlaz:

    ./file2
    ./file1

    Komanda traži sve datoteke u kojima:

    • Vlasnik datoteke ima dozvole za čitanje/pisanje/izvršavanje.
    • Grupa ima dozvole za čitanje/pisanje.
    • Drugi imaju dozvolu za čitanje/pisanje.

    Kao takva, vraća dve datoteke koje ispunjavaju ovaj kriterijum – `file1` i `file2`. Datoteke ne moraju imati tačne dozvole od 766 i mogu imati dodatne dozvole dokle god imaju najmanje navedene.

    Pronalaženje datoteka u koje vlasnik može da piše

    Sada ćemo koristiti `/` da tražimo datoteke u koje može pisati bilo njihov vlasnik, grupa ili drugi.

    find -perm /222

    Izlaz:

    .
    ./file2
    ./file3
    ./file1

    Gore navedeno traži datoteke u koje može pisati bilo njihov vlasnik ili grupa.
    Ovo vraća datoteke u koje se može pisati bilo ko od njih, ali ne nužno i oba. Da biste videli datoteke gde obe strane imaju dozvole za pisanje, koristite prefiks `-`.

    find -perm -220

    Izlaz:

    ./file2
    ./file1

    Pronalaženje datoteka u vlasništvu korisnika

    Pronalaženje svih datoteka u vlasništvu Jack-a:

    find /home -user jack

    Izlaz:

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

    Pronalaženje određenih datoteka u vlasništvu korisnika

    Pronalaženje svih tekstualnih datoteka u vlasništvu Jack-a:

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

    Izlaz:

    /home/jack/docs/file32.txt

    Pronalaženje i prikaz datoteka i direktorijuma zajedno sa njihovim dozvolama

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

    Izlaz:

    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

    Pronalaženje i delovanje na osnovu rezultata

    U ovom odeljku ćemo pogledati kako možete delovati na datoteke koje odgovaraju obrascu navedenom u komandi `find`.

    Pronalaženje datoteka i promena dozvola

    Pronalaženje i promena dozvola određenih tipova datoteka. U ovom primeru ćemo raditi sa PHP datotekama sa različitim dozvolama, kao što je prikazano u nastavku.

    [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
    

    Sada ćemo potražiti sve PHP datoteke (gore) i zameniti njihove dozvole sa 755:

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

    Komanda traži PHP datoteke u direktorijumu `ver`, a zatim postavlja njihove dozvole na 755 (rwxr-xr-x).

    Rezultati:

    [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
    

    Pronalaženje i promena dozvola za datoteke i direktorijume

    Pronalaženje datoteka sa 644 dozvole i njihova promena tako da imaju 655 dozvola:

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

    Takođe možete potražiti direktorijume sa 644 dozvolama i zameniti ih sa 755.

    find . -type d -perm 644

    Izlaz:

    ./docs

    Direktorijum dokumenata ima 644 dozvole:

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

    Da bismo ih postavili na 755, pokrećemo:

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

    Sada možemo ponovo da proverimo da li su dozvole 755:

    find . -type d -perm 755

    Izlaz:

    .
    ./docs

    Odozgo možemo videti da direktorijumi root i docs imaju 755 dozvola.

    Komanda `ls -la` daje sledeće detalje:

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

    Pronalaženje i kopiranje datoteka ili direktorijuma

    Pronalaženje i kopiranje određene datoteke u direktorijum.

    Komanda ispod će pronaći datoteku `file22.txt` i kopirati je u direktorijum `~/tmp/images`.

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

    Pronalaženje i kopiranje jedne vrste datoteka u direktorijum.

    Da biste pronašli datoteke kao što su slike sa ekstenzijom `jpg` u trenutnom direktorijumu i kopirali ih na drugu lokaciju kao što je folder sa slikama, koristite:

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

    Ovo će pronaći i kopirati sve `jpg` datoteke u folder `~/tmp/images`.

    Pronalaženje i kopiranje jedne datoteke u više direktorijuma

    Pronalaženje i kopiranje jedne datoteke u više direktorijuma.

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

    Ovo će pronaći datoteku `hci` i kopirati je u tri direktorijuma: `/tmp/dir1/`, `/tmp/dir2/` i `$HOME/3/`.

    Pronalaženje i premeštanje datoteka u drugi direktorijum

    Da biste premestili poznatu datoteku iz direktorijuma u drugi. Da biste premestili datoteku `universal.php`:

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

    Pretraživanje i premeštanje datoteka sa određenom ekstenzijom u drugi folder:

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

    Pronalaženje određenih datoteka i njihovo premeštanje u određeni folder

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

    Komanda traži sve datoteke čiji nazivi počinju sa `uni` i imaju bilo koju ekstenziju. Zatim ih premešta u direktorijum `/unifiles/`.

    Pronalaženje i premeštanje datoteka na osnovu starosti

    Pronalaženje i premeštanje datoteka starijih od navedenih dana na drugu lokaciju, kao što je arhiva.

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

    Ovo će tražiti PDF datoteke starije od 20 dana i premestiti ih u direktorijum `backup1`.

    Pronalaženje i brisanje datoteka i direktorijuma

    Sintaksa za pronalaženje i uklanjanje datoteka ili direktorijuma u trenutnom direktorijumu je:

    find . -type f -name "datoteka-za-brisanje" -exec rm -f {} ; za brisanje samo datoteka ili

    find . -type d -name "dir-za-brisanje" -exec rm -rf {} ; za brisanje samo direktorijuma

    Pronalaženje i brisanje samo određenih datoteka

    Da biste pronašli i izbrisali datoteke koje počinju sa `til`, koristite:

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

    Da biste pronašli i izbrisali direktorijume koji počinju sa `til`:

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

    Uklanjanje i datoteka i direktorijuma

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

    Ovo će ukloniti i datoteke i direktorijume koji počinju slovima `til`.

    Brisanje po ekstenziji

    Ispod je prikazano kako možete pronaći i izbrisati sve tekstualne datoteke u trenutnom direktorijumu. Zamenite `txt` drugom ekstenzijom, kao što su `bak`, `pdf` ili bilo koja druga koju želite da uklonite.

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

    U slučaju da želite da vas sistem pita za potvrdu pre brisanja svake datoteke, dodajte opciju `-i` kao što je prikazano u nastavku:

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

    Izlaz:

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

    Po default-u, `rm` neće ukloniti direktorijume i potrebno je da koristite opciju `-r` da biste omogućili rekurzivno uklanjanje. Ovo osigurava brisanje praznih direktorijuma i onih koji sadrže datoteke. Opcija `-f` forsira uklanjanje i koristi se i za datoteke i za direktorijume.

    Pronalaženje i brisanje datoteka starijih od n dana

    Pronalaženje i brisanje rezervnih kopija datoteka starijih od 20 dana iz trenutnog direktorijuma.

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

    Ovo će izbrisati sve `.bak` datoteke starije od 20 dana.

    Pronalaženje i brisanje samo direktorijuma

    Da biste izbrisali direktorijum pod nazivom `dir22`:

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

    Uverite se da se poklapa velika i mala slova imena direktorijuma ili koristite opciju `-iname`.

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

    Uklanja i `Dir22` i `dir22`.

    Da biste potvrdili pre brisanja, koristite opciju `-i`.

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

    Izlaz:

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

    U ovom slučaju, ukucali smo `n` za direktorijum `Dir22` koji neće biti obrisan i `y` za `dir22` koji će sada biti uklonjen.

    Pronalaženje i uklanjanje praznih datoteka

    Možete koristiti bilo koju od sledećih komandi da biste locirali prazne datoteke i automatski ih izbrisali.

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

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

    Pronalaženje i uklanjanje praznih direktorijuma

    Da bismo uklonili prazne direktorijume, koristićemo opciju `d`.

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

    Druga alternativa je da koristite opciju `delete` umesto `remove`.

    find ./ -type d -empty -delete

    Imajte na umu da brisanje sistemskih ili kritičnih datoteka sa vašeg računara može oštetiti operativni sistem ili aplikacije, ili dovesti do gubitka važnih podataka.

    Da biste izbegli slučajno brisanje, najbolje je da koristite korisnički nalog koji nije root. Takođe, uverite se da brišete prave datoteke koje nisu korisne i da imate rezervnu kopiju svih datoteka sa podacima za svaki slučaj.

    Šta je sledeće?

    Slobodno isprobajte gore navedene Linux komande za pronalaženje u vašoj laboratoriji ili neprodukcionom okruženju. Pogledajte da li možete da koristite neke od njih za automatizaciju čišćenja sistema datoteka pomoću `crontab`. A da biste savladali Linux, pogledajte ovaj online kurs.