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