Find

Allikas: Kuutõrvaja

Nime järgi otsimine

Failide otsimiseks sobib kasutada programmi Find. Otsimiseks on vaja teada kataloogi, kust otsida ning eritunnust, millega otsingut kitsendada. Tavaline on failide otsimine nime järgi. Näiteks otsime jooksvast kataloogist ja selle alla jäävatest alamkataloogidest faili nimega 'failinimi'

find . -name failinimi -print

Kui täpne failinimi pole teada, siis saab kasutada malle. Mall tuleb panna jutumärkidesse ("). Programmile find saab ette anda kataloogi (või kataloogide nimekirja), millest faile otsida.

find /home/priit/ /home/mart/ -name "*.dvi" -print
find /home/priit/doc/ -name "looma*" -print

Vaid '-print' võtit kasutades teatab find ainult faili nime. Selline esitusviis sobib hästi findi väljundi mõne programmi sisendisse suunamiseks. Vajadusel on aga võimalik saada failide kohta rohkem infot:

find . -name "[WwVv]*" -ls

Võti -ls esitab ekraanile faili kohta praktiliselt sama hulga infot, mis käsk 'ls -l'.

Aja järgi otsimine

Iga failiga koos säilitatakse ka selle viimase muutmise ning viimase kasutamise aega. Vaikimisi käib aja arvestamine päevades. Otsime faile, mida on muudetud viimase kolme päeva jooksul

find . -mtime -3 -print

Seame tingimuse otsida faile, mida muudeti mitte hiljem kui seitsme ja mitte varem kui neljateist päeva eest käesoleva hetke suhtes

find . -mtime +7 -mtime -14 -print

Kui tekib vajadus otsida faile täpsema ajavahemiku järgi kui üks päev, siis on olemas ka võimalus lugeda minuteid: otsime faile, mida on muudetud viimase 10 minuti jooksul

find . -mmin -10 -print 

Analoogiliselt saab otsida: faili viimase kasutamise aja järgi (access time): -atime, -amin mõnel puhul ka faili loomise aja järgi (creation time): -ctime, -cmin

vaikimisi töötavad kõik otsingud hetkel kehtiva kellaaja suhtes. Viimane päev on seega antud hetkest 24h tagasi. Soovi korral on võimalik programmi teistsugune käitumine - lugeda päevi ööpäeva algusest alates. Otsime faile, mis loodud eile kell 00:00 ja 24:00 vahel

find . -daystart -ctime 1 -print

Otsida saab ka suuruse järgi

find * -size +51200

meile näidatakse kõik 50Mb suuremad failid.

Faili tüüp

Enamlevinud tüübid on tavaline fail ja kataloog. Otsime näiteks 'a' tähega algavaid katalooge

find . -name "a*" -type d -print

või kõiki ".avi" laiendiga faile

find /usr -type f -name "*.avi"

Võimalikud failitüübid on toodud tabelis:

 b  plokkseade
 c  märkseade
 d  kataloog
 p  nimega toru
 f  tavaline fail
 l  nimeline viide (symblic link)
 s  pistik (socket)

Selekteerivam otsing

Kui on soov rekursiivsest otsingust jätta välja teatud kaustad siis tuleks kasutada käsku

find / -type d \( -name kautanimi \) -prune -o -type d -print

või paljude failide-kaustadega

find / -type d \( -name esimenekaust -o name teinekaust -o kolmaskaust  \) -prune -o -type d -print

Programmide käivitamine

Iga leitud faili jaoks saab käivitada programmi. Muuseas võimaldab see sooritada näiteks otsingut faili sisu järgi. Kasulik on piirata otsingut tüübiga f, et vältida asjatuid veateateid. Käsk väljastab failide nimed, milles sisaldub sõna tiiger:

find . -type f -exec grep -l tiiger {} \;

seda saab kasutada ka failide seest mingi kindla rea leidmiseks

find . -exec grep "www" '{}' \; -print

mille puhul tuuakse ekraanile aktiivse kataloogi failidest read, kus on olemas www nimi

Võime korraldada ka interaktiivse vahendi väga vanade (rohkem kui tuhat päeva) failide kustutamiseks: kõigepealt näidatakse faili atribuute ja seejärel küsitakse, kas fail kustutada

find /home/mart/tmp/ -mtime +1000 -ls -exec rm -i {} \;

find oskab uuemal ajal ise ka kustutada, näiteks võib proovida :

find /home -type f -name "pahadfailid.*" -delete 

Failide seest millegi otsing

find . | xargs grep 'nimetus'

tühikuid sisaldavate failinimede korral otsingu jaoks aga käsk selline

find . -print0 | xargs -0 grep 'nimetus'

Üldiselt on lihtsam mingis kaustas teha küll tavaliselt näiteks grep "otsitav" *

Kõigi faili failinimi hardlinkide otsimine käesolevast kataloogist

find . -samefile failinimi