Next: Skall-programmering
Up: Fleire kommandoar til vanleg
Previous: Kommandoen sleep
Dersom ein ein vil operere på filar i subkatalogar i tillegg
til filar på ståande katalog så har vi kommandoen
find. Kommandoen er ein av dei kraftigaste,- og har
også ein av dei vanskelegaste kommando-linjene i UNIX.
På den andre sida er find så kraftig at det er
vel anvente timar å lære seg alle knep med denne
kommandoen.
Kommandoen leitar seg ned gjennom hierarkiet i filsystemet og
lokaliserer alle filar som kvalifiserer kriteriane på
kommando-linja. Kommandoen kan utføre ei rekkje med aksjonar
på filane den finn. Basisen for kommando-linja er
følgande :
zevs% find sti-liste utrykk
der sti-liste er ei liste av katalogar,- liste kan
innholde ein eller fleire katalogar, med enten relative eller
fulle sti-namn. Uttrykksdelen er operatorane som beskriv
utvalgskriteriet for filar, og aksjonane som find skal
utføre på dei.
zevs% find $HOME/text/unixkurs -print
/home/zevs/ifi/trondk/text/unixkurs
/home/zevs/ifi/trondk/text/unixkurs/kurs.log
/home/zevs/ifi/trondk/text/unixkurs/kurs.tex
/home/zevs/ifi/trondk/text/unixkurs/ps
/home/zevs/ifi/trondk/text/unixkurs/ps/kjerne.ps
/home/zevs/ifi/trondk/text/unixkurs/ps/kurs.ps
/home/zevs/ifi/trondk/text/unixkurs/ps/skall.ps
/home/zevs/ifi/trondk/text/unixkurs/ps/program.ps
/home/zevs/ifi/trondk/text/unixkurs/ps/rettigheter.ps
/home/zevs/ifi/trondk/text/unixkurs/ps/banner.ps
/home/zevs/ifi/trondk/text/unixkurs/kurs.tex
/home/zevs/ifi/trondk/text/unixkurs/bak
/home/zevs/ifi/trondk/text/unixkurs/bak/kurs.tex
/home/zevs/ifi/trondk/text/unixkurs/kurs.dvi
/home/zevs/ifi/trondk/text/unixkurs/kurs.aux
/home/zevs/ifi/trondk/text/unixkurs/kurs.toc
/home/zevs/ifi/trondk/text/unixkurs/kurs.ps
zevs%
Dette er ein av dei minste kommandoane, find skal finne
alle filar og katalogar under $HOME/text/unixkurs.
Ein kan også som nemnt tidlegare bruke ei liste av
katalogar.
zevs% find $HOME /home/zevs/ifi/eyvindh -print
Kommandoen find kan også ta jokertegn :
zevs% find /home/zevs/ifi/* -print
Som standard utfører ikkje find nokon aksjon på
filene den finn, så derfor er -print nødvendig
for at find skal liste ut filane på standard ut, eit
namn for kvar linje.
zevs% find / -print | wc -l
Denne kommandoen vil telle antal filar og katalogar på denne
maskina. Store operasjonar med find tek gjerne lang tid
å fullføre, spesielt på store maskiner og maskiner med
filsystem ute i nettverket. Bruk fornuften og prøv å
avgrense søket mest mulig ved å gå så langt ned i
filsystemet som mulig.
Det finst ei rekkje forskjellige operatorar for å finne
filar,- namn, eigar av fil, gruppe, dato og størrelse, for
å nemne nokre. Alle operatorar startar med - ( minus-tegnet ).
zevs% find . -name .profile -print
./.profile
./oppstartfiler/oppstart.old/.profile
./.rsrc/.profile
zevs%
Det spesifiserte namnet kan også inneholde jokertegn dersom
det vert sett i herme-tegn.
zevs% find . -name "*profile" -print
Andre jokertegn som ?, [ og ] kan også brukast dersom dei
også vert sett i hermetegn.
Når find søkjer i eit filsystem så er
rekkefølgen avhengig av den interne organiseringa av
filsystemet,- dersom ein vil har sorteret rekkefølje må
ein redirigere utdataene frå find til sort.
Når fleire operatorar er spesifisert vert det utført
frå venstre mot høgre.
zevs% find . -print -name "*profile"
er ikkje det same som :
zevs% find . -name "*profile" -print
fordi den første kommandoen skriv ut filnamn etter kvart som
den filar eller katalogar og deretter leitar etter filar som
kan passe namnet "*profile". Den andre kommandoen leiter etter
filar som kan passe namnet "*profile" først og etterpå
skriv ut namnet på dei filane kommandoen har funne.
Kommandoen søkjer etter alle filnamn i sti-lista, brukar utrykka
frå venstre mot høgre for å godta eller å
forkaste filar heilt til det siste uttrykket er utført.
Dersom ei fil ikkje tilfredsstiller eit uttrykk vil ikkje dei
etterfølgande bli utført.
Vi kan gå litt nærare inn på opsjonar for
find. Opsjonen for å finne filar med eigar,
-user og gruppe -group.
Opsjonen -type c leiter etter filar av bestem type,- der
c er den type fil som kjem fram i venstre kolonne ved
ein ls -l ( f for fil, d for katalog, l
for symbolsk lenke, p for pipe, dette er vel dei mest
vanlege ).
Opsjonen -mtime n velger ut filar som var modifisert
akkurat for n dagar sidan. Uttrykket -mtime -n
velger ut alle filar som har vore modifisert dei siste n
dagar. Uttrykket -mtime +n finn alle filar finn alle
filar som har vore modifisert før n dagar sidan.
Ellers kan ein finne filar etter størrelse,- -size n
finn alle filar på nøyaktig n blokker, -size
-n finn alle filar under n blokker og -size +n
alle over n blokker.
zevs% find / -type f -size +1000 -print
Denne kommandoen vil finne alle filar i systemet som er over
1000 blokker,- dvs. over 512 000 byte.
Ein kan invertere uttrykka ved å sette eit utropstegn
framfor operatoren ( dette tegnet blir ofte kalla
bang-operatoren i UNIX- og C-dokumentasjon ).
zevs% find $HOME -type f ! -user $LOGNAME -print
Denne kommandoen finn alle filar i min heimekatalog som ikkje eg
eig.
Operatoren ! må ha mellomrom eller tabulator på begge
sider, og den inverterer berre den operatoren som kjem rett
etter utropstegnet. Ein kan også lage større logisk
uttrykk med eller-operator.
zevs% find $HOME -size +50 -o ! -user $LOGNAME -print
Operatoren -o betyr eller ( engelsk or
). Denne kommandoen vil med andre ord finne alle filar over 50
blokker og alle filar som ikkje eg eig.
Alle operatorar som ikkje har -o mellom seg er logisk
knytta saman med og ( engelsk and ).
Meir avanserte kommandoar :
zevs% find . -type f [IMAGE ]( -name "*.abc" -o -name"*.def" -o -name "*.ghi" [IMAGE ]) -print
Her vil ein finne alle vanlege filar som enten endar på
abd, def eller ghi. Legg merke til at vi
må unnta parantesane for spesiell betydning ved hjelp av
bakslask-tegnet ( tegnet [IMAGE ] ). Dette er fordi
parentes har ein spesiell betydning for alle skall,- det skal vi
kome tilbake til seinare.
Kommandoen find kan eksekvere alle kommandoar for kvar
fil den finn ved hjelp av dei andre operatorane. Operatoren
-exec tek ei etterfølgande kommando-linje.
Kommandoen kan inkludere namnet på den fila som find
prosesserer ved å bruke spesial-syntaksen { og }.
Kommando-linja vert avslutta med tegna [IMAGE ];. Ein
kommando som forandrar aksess-rettighetane på alle filar
på heimekatalogen.
zevs% find $HOME -exec chmod -rw {} [IMAGE ];-print
Operatoren -exec evalurer til sant dersom
kommandoen den utfører returnerer 0 som returverdi,- ellers
vil den returnere usant.
Next: Skall-programmering
Up: Fleire kommandoar til vanleg
Previous: Kommandoen sleep
Trond.Kandal@itea.ntnu.no