Find filer og mapper med kommandoen find | Opensource.com

uanset hvor organiseret jeg beslutter at være, ser det ud til, at der altid er tidspunkter, hvor jeg bare ikke kan finde en fil. Nogle gange er det fordi jeg ikke kan huske navnet på filen i første omgang. Andre gange kender jeg navnet, men jeg kan ikke huske, hvor jeg besluttede at gemme det. Der er endda tidspunkter, hvor jeg har brug for en fil, som jeg ikke oprettede i første omgang. Uanset hvad problemet er, ved jeg dog, at jeg altid har kommandoen find på et POSIKS-system.

installation af find

kommandoen find er defineret af Posis-specifikationen, som skaber den åbne standard, hvormed Posis-systemer (herunder BSD og macOS) måles. Kort sagt, du har allerede find installeret, så længe du kører.

men ikke alle find kommandoer er nøjagtigt ens. Kommandoen GNU find har for eksempel funktioner, som kommandoen BSD eller Busyboks eller Solaris find muligvis ikke har eller har, men implementerer anderledes. Denne artikel bruger GNU find fra findutils-pakken, fordi den er let tilgængelig og temmelig populær. De fleste kommandoer, der vises i denne artikel, fungerer sammen med andre implementeringer af find, men hvis du prøver en kommando på en anden platform end og får uventede resultater, kan du prøve at hente og installere GNU-versionen.

Find en fil efter navn

du kan finde en fil efter dens filnavn ved at angive det fulde filnavn eller dele af filnavnet ved hjælp af regulære udtryk. Kommandoen find kræver stien til den mappe, du vil søge i, Indstillinger for at angive, hvilken attribut du søger (for eksempel –name for et stort set følsomt filnavn) og derefter søgestrengen. Som standard behandles din søgestreng bogstaveligt: kommandoen find søger efter et filnavn, der er nøjagtigt den streng, du indtaster mellem anførselstegn, medmindre du bruger syntaks for regulært udtryk.

Antag, at din dokumentmappe indeholder fire filer: Foo, foo, foobar.txt, og foo.xml. Her er en bogstavelig søgning efter en fil med navnet “foo”:

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

du kan udvide din søgning ved at gøre den case-ufølsom med -iname mulighed:

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

jokertegn

du kan bruge grundlæggende jokertegn med skal til at udvide din søgning. For eksempel repræsenterer stjernen (*) et vilkårligt antal 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ørgsmålstegn (?) repræsenterer et enkelt tegn:

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

dette er ikke syntaks for regulært udtryk, så prikken (.) repræsenterer en bogstavelig prik i dette eksempel.

regulære udtryk

du kan også bruge regulære udtryk. Som med -iname og -name er der både en case-sensitive og en case-ufølsom mulighed. I modsætning til -name og -iname indstillingerne anvendes en -regex og -iregex søgning på hele stien, ikke kun filnavnet. Det betyder, at hvis du søger efter foo, får du ingen resultater, fordi fooikke matcher /home/tux/Documents/foo. I stedet skal du enten søge efter hele stien eller bruge en jokertegnsekvens i begyndelsen af din streng:

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

Find en fil, der er ændret inden for den sidste uge

for at finde en fil, du sidst har ændret i sidste uge, skal du bruge indstillingen -mtime sammen med et (negativt) antal dage i fortiden:

$ 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

Find en fil, der er ændret inden for et interval på dage

du kan kombinere -mtime indstillinger for at finde en fil inden for et interval på dage. For det første -mtime argument skal du angive det seneste antal dage, du kunne have ændret filen, og for det andet give det største antal dage. For eksempel søger denne søgning efter filer med ændringstider mere end en dag i fortiden, men ikke mere end syv:

$ find ~ -mtime +1 -mtime -7

Begræns en søgning efter filtype

det er almindeligt at optimere resultaterne af find ved at angive den filtype, du leder efter. Du bør ikke bruge denne indstilling, hvis du ikke er sikker på, hvad du leder efter, men hvis du ved, at du leder efter en fil og ikke en mappe eller en mappe, men ikke en fil, kan dette være et godt filter at bruge. Indstillingen er -type, og dens argumenter er en bogstavkode, der repræsenterer et par forskellige slags data. De mest almindelige er:

  • d – vejviser
  • f – fil
  • l – symbolsk link
  • s – socket
  • p – navngivet rør (brugt til FIFO)
  • b – Bloker speciel (normalt en harddiskbetegnelse)

her er nogle 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 som standard rekursiv, hvilket betyder, at den søger efter resultater i katalogerne i mapper indeholdt i mapper (og så videre). Dette kan blive overvældende i et stort filsystem, men du kan bruge -maxdepth mulighed for at styre, hvor dybt ind i din mappestruktur, du ønsker find at komme ned:

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

du kan skiftevis indstille den mindste dybde af rekursion med -mindepth:

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

Hent cheat sheet

denne artikel dækker kun de grundlæggende funktioner i find. Det er et godt værktøj til at søge gennem dit system, men det er også en virkelig nyttig front-end for den kraftfulde parallelle kommando. Der er mange grunde til at lære find, så hent vores gratis find cheat sheet for at hjælpe dig med at lære mere om kommandoen.

Leave a Reply