Sådan finder du filer og mapper i Linux

I Linux-operativsystemer kan Find-kommandoen bruges til at søge efter filer og mapper på din computer. For at fortsætte, vælg et link fra den følgende liste eller gå gennem hvert afsnit i rækkefølge.

Bemærk: For at bruge find skal du starte med at åbne en terminal session for at få adgang til kommandolinjen.

Grundlæggende funktionalitet af find

Running find uden valgmuligheder vil producere en liste over hver fil og mappe i og under arbejdskataloget. For eksempel, hvis din arbejdsmappe er / hjem / håb / Dokumenter, vil løbe find udlevere følgende:

  • Hver fil i / hjem / håb / Dokumenter .
  • Hver undermappe i / hjem / håb / Dokumenter .
  • Hver fil i hver af disse underkataloger.

Lad os se det i aktion. Lad os først se vores arbejdskatalog ved at bruge kommandoen pwd:

pwd

 / home / håb / Dokumenter 

Lad os nu køre finde uden nogen muligheder:

finde

 . ./images ./images/hp ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG. /images/memes/picard.jpg ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at-hagreds.doc ./ hp-fanfic / dumbledores-lament.doc ./archlinux-2016.02.01-dual.iso 

I dette eksempel ses der i alt ti filer og fire undermapper i og under vores Dokumenter- mappe.

Bemærk, at udgangen starter med en enkelt prik, som repræsenterer arbejdskatalogen. At finde uden valgmuligheder er det samme som at angive, at søgningen skal begynde i arbejdsmappen, som denne:

finde .

Ovenstående eksempel er den "rigtige" måde at bruge find på . Hvis du forsøger at bruge det på et andet UNIX-lignende operativsystem, f.eks. FreeBSD, vil du opdage, at der specificeres en mappe, så det er god praksis at bruge denne form for kommandoen.

Angivelse af hvor man skal søge

For kun at liste filer og undermapper, der er indeholdt i mappen / hjem / håb / Dokumenter / billeder, angiv det som det første argument i kommandoen:

find / home / hope / Dokumenter / billeder

 / hjem / håb / Dokumenter / billeder / hjem / håb / Dokumenter / billeder / hp /home/hope/Documents/images/hp/snape.jpg /home/hope/Documents/images/hp/harry.jpg / home / hope / Dokumenter / billeder / memes /home/hope/Documents/images/memes/winteriscoming.jpg /home/hope/Documents/images/memes/goodguygary.JPG/home/hope/Documents/images/memes/picard.jpg 

Bemærk, at den fulde sti også vises i resultaterne.

Hvis vores arbejdsmappe er / hjem / håb / Dokumenter, kan vi bruge følgende kommando, som finder de samme filer:

find ./images

Men denne gang afspejler outputets startsted og ser sådan ud:

 ./images ./images/hp ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG. /images/memes/picard.jpg 

Som standard vil søgningen se i hver underkatalog på din startplacering. Hvis du vil begrænse, hvor mange underkataloger der skal søges, kan du bruge indstillingen -maxdepth med et nummer.

For eksempel vil specifikation -maxdepth 1 kun søge i den mappe, hvor søgningen begynder. Hvis der findes nogle underkataloger, vil de blive opført, men ikke søges.

finde . -maxdepth 1

 . ./images ./bigfiles.txt ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./archlinux-2016.02.01-dual.iso 

Angivelse -maxdepth 2 vil søge i mappen og en undermappe dybt:

finde . -maxdepth 2

 . ./images ./images/hp ./images/memes ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at- hagreds.doc ./hp-fanfic/dumbledores-lament.doc ./archlinux-2016.02.01-dual.iso 

Angivelse -maxdepth 3 vil søge et niveau dybere end det:

finde . -maxdepth 3

 . ./images ./images/hp ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG. /images/memes/picard.jpg ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at-hagreds.doc ./ hp-fanfic / dumbledores-lament.doc ./archlinux-2016.02.01-dual.iso 

Find ved navn

For at begrænse dine søgeresultater til kun at matche filer og mapper, der har et bestemt navn, skal du bruge funktionen -name og sætte navnet i citater:

finde . -name "picard.jpg"

 ./images/memes/picard.jpg 

Du kan også bruge jokertegn som en del af dit filnavn. For eksempel at finde alle filer, hvis navn slutter i .jpg, kan du bruge en stjerne til at repræsentere resten af ​​filnavnet. Når du kører kommandoen, vil shellen globere filnavnet i noget, der matcher mønsteret:

finde . -name "* .jpg"

 ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/picard.jpg 

Bemærk, at vores kommando ikke har angivet filen, hvis udvidelse ( JPG ) er i store bogstaver. Det skyldes, at i modsætning til andre operativsystemer, som f.eks. Microsoft Windows, er Linux-filnavne store bogstaver.

Hvis du vil udføre en sagssensitiv søgning i stedet, skal du bruge indstillingen -iname :

finde . -iname "* .jpg"

 ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG ./images/memes/picard.jpg 

Find kun filer eller kun mapper

Hvis du kun vil oprette filer og udelade katalognavne fra dine resultater, skal du angive -type f :

finde . -type f

 ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG ./images/memes/picard.jpg ./gimp-2.8 .16.tar.bz2 ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at-hagreds.doc ./hp-fanfic/dumbledores-lament.doc ./archlinux-2016.02.01-dual .iso 

For kun at vise kataloger og udelade filnavne, angiv -type d :

finde . -type d

 . ./images ./images/hp ./images/memes ./hp-fanfic 

Finde filer baseret på størrelse

Hvis du kun vil vise filer af en bestemt størrelse, kan du bruge størrelsen -størrelsen. For at angive størrelsen skal du bruge et plus eller et minustegn (for "mere end" eller "mindre end"), et tal og et kvantitativt suffiks som k, M eller G.

For eksempel at finde filer, der er "større end 50 kilobytes", brug -size + 50k :

finde . -størrelse + 50k

 ./images/memes/winteriscoming.jpg ./gimp-2.8.16.tar.bz2 ./archlinux-2016.02.01-dual.iso 

For filer "større end 10 megabyte", brug -size + 10M :

finde . -størrelse + 10M

 ./gimp-2.8.16.tar.bz2 ./archlinux-2016.02.01-dual.iso 

For "større end 1 gigabyte" skal du bruge -size + 1G :

finde . -størrelse + 1G

 ./archlinux-2016.02.01-dual.iso 

For filer i et bestemt størrelsesområde, brug to-størrelsesindstillinger. For eksempel at finde filer "større end 10 megabyte, men mindre end 1 gigabyte", angiv-størrelse + 10M-størrelse -1G :

finde . -størrelse + 10M-størrelse -1G

 ./gimp-2.8.16.tar.bz2 

Finde filer baseret på ændring, adgang eller statusændring

Alternativet -mtime begrænser søgningen efter hvor mange dage, siden filens indhold blev ændret. For at angive dage i fortiden, brug et negativt tal. For eksempel for kun at finde de filer, der blev ændret i de sidste to dage (48 timer siden), brug -mtime -2 :

finde . -mtime -2

Alternativet -mmin gør det samme, men i forhold til minutter, ikke dage. Denne kommando viser f.eks. Kun filer, der er ændret i den sidste halv time:

finde . -mmin -30

En lignende mulighed er -tid, som kontrollerer, hvornår en fils status sidst blev ændret, målt i dage. En statusændring er en ændring i filens metadata. For eksempel er ændring af tilladelser for en fil statusændring.

Optionen -cmin vil søge efter en statusændring målt i minutter.

Du kan også søge efter, hvornår en fil sidst blev åbnet - med andre ord, når indholdet sidst blev vist. Alternativet -tid bruges til at søge efter filer baseret på deres seneste adgangstid målt i dage.

Alternativet -amin vil udføre samme søgebegrænsning, men måles i minutter.

Omdirigere output til en tekstfil

Hvis du udfører en meget stor søgning, kan du gemme dine søgeresultater i en fil, så du kan se resultaterne senere. Du kan gøre dette ved at omdirigere din find- output til en fil:

finde . -iname "* .jpg"> images.txt

Du kan derefter åbne dine resultater i et tekstredigeringsprogram, eller udskrive dem med kat kommandoen.

cat images.txt

 ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG ./images/memes/picard.jpg 

Alternativt kan du røre din output til kommandoen tee, som vil udskrive output til skærmen og skrive det til en fil:

finde . -størrelsen + 500M | tee bigfiles.txt

 ./archlinux-2016.02.01-dual.iso 

kat bigfiles.txt

 ./archlinux-2016.02.01-dual.iso 

Undertrykkelse af fejlmeddelelser

Du kan få vist fejlmeddelelsen "Tilladelse nægtet", når du udfører en søgning. For eksempel, hvis du søger i rodmappen som en normal bruger:

finde /

 find: `/ var / lib / sudo / ts ': Tilladelse afvist find:` / var / lib / sudo / lectured': Tilladelse afvist find: `/ var / lib / polkit-1 ': Tilladelse afvist find:` / var / lib / container ': Tilladelse afvist søgning: `/var/lib/gdm3/.dbus': Tilladelse afvist søgning:` /var/lib/gdm3/.config/ibus ': Tilladelse afvist ... 

Du får vist denne fejlmeddelelse, hvis find forsøger at få adgang til en fil, som din brugerkonto ikke har tilladelse til at læse. Du kan muligvis udføre søgningen som superbrugeren ( root ), som har fuldstændig adgang til alle filer på systemet. Men det anbefales ikke at gøre ting som rod, medmindre der ikke er andre muligheder.

Hvis alt du skal gøre er at skjule meddelelserne "Permission denied", kan du tilføje 2 &> 1 | grep -v "Tilladelse afvist" til slutningen af ​​din kommando, som denne:

find / 2> & 1 | grep -v "Tilladelse nægtet"

Ovennævnte eksempel filtrerer ud af meddelelsen "Tilladelse nægtet" fra din søgning. Hvordan?

2> & 1 er en speciel omdirigering, der sender fejlmeddelelser til standard output for at rør de kombinerede linjer af output til grep- kommandoen. grep -v udfører derefter en invers kamp på "Tilladelse nægtet", idet der kun vises linjer, der ikke indeholder den pågældende streng.

Omdirigering og brug af grep til at filtrere fejlmeddelelserne er en nyttig teknik, når "Tilladelse nægtet" er cluttering dine søgeresultater, og du kan ikke udføre søgningen som root.

eksempler

find ~ /. -name "* .txt" -amin -120

Find alle filer i din hjemmekatalog og nedenunder, som slutter i udvidelsen " .txt ". Vis kun de filer, der blev åbnet de seneste to timer.

finde . -name "* .zip" -størrelse + 10M-time -3

Find alle filer i arbejdskataloget og under, hvis navn har udvidelsen " .zip " og hvis størrelse er større end 10 megabyte. Vis kun filer, hvis indhold blev ændret i de sidste 72 timer.

finde . -iname "* rapport *" -type f -maxdepth 2

Udfør en sag-ufølsom søgning efter filer, der indeholder ordet " rapport " i deres navn. Hvis søgningen finder en mappe med "rapport" i sit navn, skal du ikke vise den. Søg kun i arbejdskataloget og et katalogniveau under det.

find / -name "* init *" 2> & 1 | grep -v "Tilladelse nægtet" | tee ~ / initfiles.txt

Find alle filer på systemet, hvis navn indeholder " init ", undertrykker fejlmeddelelser. Vis resultater på skærmen og send dem til en fil i din hjemmekatalog med navnet " initfiles.txt ".