Find
Sisukord
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