find er et kommandolinje -verktøy for å finne filer i Linux. Verktøyet søker gjennom filsystemet, og lokaliserer filer eller mapper basert på brukerdefinerte kriterier.
En brukerdefinert handling kan utføres på hvert resultat i søket. Høres det komplisert ut? Det er det egentlig ikke, her har du forklaringen.
Finn filer i Linux på navn eller etternavn
Bruk find fra kommandolinjen for å lokalisere en spesifik fil ved hjelp av filnavn eller etternavn. Følgende eksempel søker etter *.err -filer i mappen /home/brukernavn/ og alle undermapper:
find /home/brukernavn/ -name "*.err"
Linux find kommandoen
find kommandoer gjøres etter dette mønsteret:
find <valg> <bane> <uttrykk>
- Valg (options) attributtet styrer metode og optimalisering av find prosessen
- Bane (path) attributtet definerer toppnivået for mappen hvor find begynner søket
- Uttrykk (expression) attributtet definerer søket, og produserer resultatet
Eksempel (med forklaring):
find -03 -L /var/www/ -name "*.html"
Denne kommandoen benytter høyeste optimalisering (-03) og tillater find å søke symbolske lenker (-L). find søker hele mappe -hierarkiet under /var/www/ etter filer med etternavnet .html.
Grunnleggende eksempler
find . -name test.txt
Søker filen test.txt i mappen du befinner deg i, og alle undermapper.
find /home -name *.jpg
Søker etter alle filer med etternavn .jpg i mappen /home, og alle undermapper.
find . -type f -empty
Søker etter blanke filer i mappen du befinner deg i.
find /home -user naldy -mtime 7 -iname ".db"
Søker etter alle .db filene modifisert de siste 7 dagene av brukeren naldy
Optimalisering og alternativer i find
Standardmetoden for søk med find vil ignorere symbolske lenker (snarveier). Om du ønsker at find skal følge og vise symbolske lenker, can du legge til -L som valg (option) i kommandoen.
find optimaliserer filter og søke -strategi for å gi deg resultatet raskere. Tre nivå for optimalisering er tilgjengelig i find, og spesifiseres som -01, -02, -03.
- -01 er standardmetoden, og tvinger find til å filtrere basert på filnavn, før andre tester eller søk kjøres.
- -02 prioriterer filnavn som i -01, deretter prioriteres etternavn eller filtype, før andre tyngre tester eller søk kjøres.
- -03 tillater find å sortere alle tester basert på ressursbruk og sannsynligheten for treff.
Alternativer
-maxdepth X
Søker mappen angitt, samt antall undermapper angitt i verdi X.
-iname
Tar ikke hensyn til store og små bokstaver.
-not
Bruker versalsensitivitet (case sensitive) og returnerer kun treff med likt mønster (store og små bokstaver).
-type f
Søker etter filer.
-type d
Søker etter mapper.
Søk filer basert på sist endret (eller modifisert)
find kommandoen kan søke etter en fil eller mappe basert på når filen (eller mappen) sist ble endret:
find / -name "*conf" -mtime 7
Denne kommandoen viser all filer i hele filsystemet som ender med bokstavene conf og som har blitt endret de siste 7 dagene.
find /home/brukernavn/ -name "*conf" -mtime 3
Denne kommandoen viser alle filer i mappen /home/brukernavn/ som ender med bokstavene conf og som har blitt endret de siste 3 dagene.
Bruk grep til å søke filer basert på innhold
find kommandoen kan kun gjøre søk i filhierarkiet, basert på en fil eller mappe sitt navn og meta data. Om du trenger å gjøre et søk basert på innholdet i en fil, brukes verktøyet grep.
Eksempel (med forklaring):
find . -type f -exec grep "eksempeltekst" '{}' \; -print
Dette søker alle objekter i mappen du befinner deg i (.) som er en fil (-type f), og kjører deretter kommandoen grep eksempeltekst for hver eneste fil som treffer søket.
Filene som inneholder eksempeltekst vises på skjermen (-print). Den kurvede parantesen ({}) er en plassholder for find resultatene. Disse er ({}) innkapslet i anførselstegn (‘) for å unngå at grep søker i et misdannet filnavn.
Kommandoen -exec blir avsluttet med et semikolon (;), angitt med (\;) for å unngå videre handling fra kommandolinjen.
Før implementering av -exec valget kom, kunne en slik kommando ha brukt xargs kommandoen for å gi et tilsvarende resultat.
find . -type f -print | xargs grep "eksempeltekst"
Hvordan søke og utføre en prosess med find kommandoen
-exec valget kjører kommandoer mot hvert eneste objekt som søket finner.
Eksempel (med forklaring):
find . -name "rc.conf" -exec chmod o+r '{}' \;
Kommandoen søker alle objekt i mappen du befinner deg i (.) med navnet rc.conf, og kjører kommandoen chmod o+r for å endre filrettighetene på alle treff fra find søket.
Kommandoer som bruker -exec blir kjørt fra mappen hvor find befinner seg. Bruk -execdir for å utføre handlingene i mappen hvor søket utføres. Dette vil være en sikrere løsning, og gi et mer ønsket resultat for noen operasjoner.
-exec eller -execdir kjører uten videre samtykke. Om du foretrekker å bli varslet før en handling blir utført, kan du erstatte -exec med -ok, eller -execdir med -okdir.
Hvordan søke og slette filer
Bruke valget -delete til slutt i find kommandoen for å slette filer som søket treffer. Denne metoden bør kun brukes om du er helt sikker på at søkeresultatet kun treffer filer du ønsker å slette.
I følgende eksempel brukes find til å søke fil hierarkiet fra mappen du befinner deg i (.) og alle undermapper. Dette eksempelet vil slette alle filene med fil -etternavnet .bak:
find . -name "*.bak" -delete
Oppsummering
Når man jobber med Linux vil man før eller siden måtte åpne en terminal og benytte kommandolinjen. Da er det greit å kunne grunnleggende funksjoner som å søke etter filer eller mapper.
find er et verktøy som finnes på alle Linux-baserte systemer og det mest naturlige valget. Selv om det for de fleste vil være tilstrekkelig å kunne søke etter en fil eller mappe, er muligheten for mer avanserte oppgaver mange.