Finn filer og kataloger På Linux med finn-kommandoen | Opensource.com

Uansett hvor organisert jeg bestemmer meg for å være, ser det ut til at det alltid er tider når jeg bare ikke kan finne en fil. Noen ganger er det fordi jeg ikke kan huske navnet på filen i utgangspunktet. Andre ganger vet jeg navnet, men jeg kan ikke huske hvor jeg bestemte meg for å lagre det. Det er til og med tider når jeg trenger en fil som jeg ikke opprettet i utgangspunktet. Uansett hva det er, vet jeg at på ET POSIX-system har jeg alltid kommandoen find.

Installere finn

kommandoen find er definert AV POSIX-spesifikasjonen, som skaper den åpne standarden SOM POSIX-systemer (Inkludert Linux, BSD og macOS) måles etter. Enkelt sagt, du har allerede find installert så lenge Du kjører Linux, BSD eller macOS.

men ikke alle find kommandoer er nøyaktig like. Gnu find – kommandoen, for eksempel, har funksjoner som bsd eller Busybox eller Solaris find kanskje ikke har eller har, men implementerer annerledes. DENNE artikkelen bruker GNU find fra findutils-pakken fordi den er lett tilgjengelig og ganske populær. De fleste kommandoer demonstrert i denne artikkelen fungerer med andre implementeringer av find, men hvis du prøver en kommando på en annen Plattform Enn Linux og får uventede resultater, kan du prøve å laste ned OG installere GNU-versjonen.

Finn en fil ved navn

du kan finne en fil ved filnavnet ved å gi hele filnavnet eller deler av filnavnet ved hjelp av regulære uttrykk. Kommandoen find krever banen til katalogen du vil søke i, alternativer for å angi hvilket attributt du søker etter (for eksempel –name for et saksfølsomt filnavn), og deretter søkestrengen. Som standard behandles søkestrengen bokstavelig: kommandoen find søker etter et filnavn som er nøyaktig strengen du skriver inn mellom anførselstegn, med mindre du bruker vanlig uttrykkssyntaks.

Anta At Dokumentkatalogen inneholder fire filer: Foo, foo, foobar.txt, og foo.xml. Her er et bokstavelig søk etter en fil med navnet “foo”:

$ find ~ -name "foo"
/home/tux/Documents/examples/foo

du kan utvide søket ved å gjøre det små og store bokstaver med alternativet -iname :

$ find ~ -iname "foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo

Jokertegn

du kan bruke grunnleggende jokertegn for shell til å utvide søket. For eksempel representerer stjernen (*) et hvilket som helst antall tegn:

$ find ~ -iname "foo*"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt

et spørsmålstegn (?) representerer et enkelt tegn:

$ find ~ -iname "foo*.???"
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt

dette er ikke vanlig uttrykkssyntaks, så prikken (.) representerer en bokstavelig prikk i dette eksemplet.

Regulære uttrykk

du kan også bruke regulære uttrykk. Som med -iname og -name, er det både et saksfølsomt og et saksfølsomt alternativ. I motsetning til alternativene -name og -iname brukes imidlertid et -regex og -iregex søk på hele banen, ikke bare filnavnet. Det betyr at hvis du søker etter foo, får du ingen resultater fordi foo ikke samsvarer /home/tux/Documents/foo. I stedet må du enten søke etter hele banen, eller bruke en jokertegnsekvens i begynnelsen av strengen:

$ find ~ -iregex ".*foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo

Finn en fil som er endret i løpet av den siste uken

hvis du vil finne en fil du sist endret i forrige uke, bruker du alternativet -mtime sammen med et (negativt) antall dager tidligere:

$ find ~ -mtime -7
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt

Finn en fil som er endret innen et område på dager

du kan kombinere -mtime alternativer for å finne en fil innen et område på dager. For det første argumentet -mtime oppgir du det siste antallet dager du kunne ha endret filen, og for det andre gir du det største antallet dager. For eksempel ser dette søket etter filer med modifikasjonstider mer enn en dag i fortiden, men ikke mer enn syv:

$ find ~ -mtime +1 -mtime -7

Begrens et søk etter filtype

det er vanlig å optimalisere resultatene av find ved å angi filtypen du leter etter. Du bør ikke bruke dette alternativet hvis du ikke er sikker på hva du leter etter, men hvis du vet at du leter etter en fil og ikke en katalog, eller en katalog, men ikke en fil, kan dette være et flott filter å bruke. Alternativet er -type, og argumentene er en bokstavkode som representerer noen forskjellige typer data. De vanligste er:

  • d – katalog
  • f – fil
  • l – symbolsk lenke
  • s – socket
  • p – navngitt rør (brukt TIL FIFO)
  • b – blokker spesiell (vanligvis en harddiskbetegnelse)

her er noen eksempler:

$ find ~ -type d -name "Doc*"
/home/tux/Documents
$ find ~ -type f -name "Doc*"
/home/tux/Downloads/10th-Doctor.gif
$ find /dev -type b -name "sda*"
/dev/sda
/dev/sda1

Juster omfang

kommandoen find er rekursiv som standard, noe som betyr at den søker etter resultater i katalogene til kataloger som finnes i kataloger (og så videre). Dette kan bli overveldende i et stort filsystem, men du kan bruke alternativet -maxdepth til å kontrollere hvor dypt inn i mappestrukturen du vil find å synke:

$ find /usr -iname "*xml" | wc -l
15588
$ find /usr -maxdepth 2 -iname "*xml" | wc -l
15

du kan alternativt angi minimumsdybden for rekursjon med -mindepth:

$ find /usr -mindepth 8 -iname "*xml" | wc -l
9255

Last ned cheat sheet

denne artikkelen dekker bare de grunnleggende funksjonene til find. Det er et flott verktøy for å søke gjennom systemet ditt, men det er også en veldig nyttig frontend for den kraftige Parallellkommandoen. Det er mange grunner til å lære find, så last ned vår gratis find cheat sheet for å hjelpe deg å lære mer om kommandoen.

Leave a Reply