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
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 foo
ikke 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