Mester Linux find-kommandoen: 40+ eksempler!

Utforsk kraften i Linux find-kommandoen

Linux sin find-kommando er et utrolig fleksibelt verktøy, uunnværlig for systemadministratorer som ønsker å lokalisere og håndtere filer og mapper basert på en rekke søkekriterier. Den gir deg muligheten til å identifisere elementer etter navn, type, filendelse, størrelse, tilgangsrettigheter og mye mer.

Utover den enkle lokaliseringen, kan find-kommandoen kombineres med andre kommandoer for å utføre handlinger på de funnede elementene. Ved å benytte -exec-alternativet, kan systemadministratorer kjøre eksterne kommandoer for å kopiere, flytte, slette eller endre tilgangsrettigheter for filene som matcher de oppgitte kriteriene, som for eksempel størrelse eller navn.

I denne veiledningen vil vi først se på grunnleggende bruk av Linux find-kommandoen med praktiske eksempler, som viser deg hvordan du effektivt finner filer og mapper. Deretter vil vi utforske hvordan du kan bruke -exec-alternativet for å utføre operasjoner på de identifiserte filene og mappene basert på egenskaper som størrelse og tilgangsrettigheter.

Den grunnleggende strukturen for find-kommandoen er slik:

find {sti} {navn-på-fil-eller-mappe-å-søke} {handling-som-skal-utføres}

Hvor:

  • sti: Angir katalogen der søket skal starte.
  • navn-på-fil-eller-mappe-å-søke: Spesifiserer filen eller mappen du leter etter.
  • handling-som-skal-utføres: Definerer handlingen som skal utføres på de funne elementene (f.eks. kopiere, slette, flytte).

I denne opplæringen vil vi fokusere på hvordan du lokaliserer filer og mapper som samsvarer med spesifikke mønstre, og hvordan du utfører handlinger på dem etter at de er funnet. Veiledningen er basert på Ubuntu, men prinsippene gjelder for de fleste Linux-distribusjoner og versjoner.

Finne Filer og Mapper

Søk etter bestemte filer basert på navn eller filtype

For å finne en bestemt fil, utfør kommandoen fra rotkatalogen (/). Kommandoen skal inneholde det nøyaktige filnavnet du er ute etter.

find . -name file22.txt

Eksempelresultat:

./test/file22.txt
./sales/file22.txt

Merk at resultatene viser hele stien til filen. Dette er nyttig når du ikke vet filens eksakte plassering, eller når den er lagret på flere steder.

Du kan også søke etter en fil i en bestemt katalog mens du befinner deg et annet sted. I dette tilfellet må du spesifisere stien til katalogen der du ønsker å søke.

find ./test -name file22.txt

Søke etter spesifikke filer i en annen katalog

La oss si at vi vil finne alle filene i test-katalogen som begynner med bokstaven «fil».

find ./test -name file*

Eksempelresultat:

./test/file22.txt
./test/file30.doc
./test/file1.txt
./test/file5,doc

Søke etter filer basert på filendelse

For å finne alle filer med en bestemt filendelse, legg til denne filendelsen i kommandoen.

find . -name *.txt

Eksempelresultat:

./test/subtest/subfil.txt
./test/file22.txt
./test/file1.txt
./home1/files32.txt
./home2/file22.txt
./qa/tags.txt

Finne både filer og mapper etter navn

Bruk kommandoen nedenfor for å finne både filer og mapper som begynner med bokstavene «qa». I vårt tilfelle har vi filene qatree.txt og qa.txt, i tillegg til en mappe med navnet qa.

Hvis vi kjører kommandoen:

find ./ -name "qa*"

Dette returnerer følgende resultat:

./test/qatree.pdf
./test/qa.txt
./home/qa

Kommandoen returnerer både filer og mapper som matcher søkekriteriene. For å kun finne filer eller mapper, må du spesifisere dette i kommandoen.

Bare finn filer eller mapper

For å finne bare filer, bruk -type f-bryteren.

Bare filer:

find ./ -type f -name "qa*"

Eksempelresultat:

./test/qatree.pdf
./test/qa.txt

Bare mapper:

Legg til -type d-alternativet for å bare finne mapper.

find ./ -type d -name "qa*"

Eksempelresultat:

./home/qa

find-kommando som ignorerer store og små bokstaver

Alle søk med -name-bryteren skiller mellom store og små bokstaver. For å gjøre et søk som ikke skiller mellom store og små bokstaver, bruk -iname-alternativet.

find ./ -iname "qa*"

Eksempelresultat:

./test/qatree.pdf
./test/qa.txt
./test/QAtest.txt
./home/qa

Søke etter en fil i flere mapper

For å søke etter filer i flere mapper, legg til stiene til disse mappene i kommandoen. I vårt tilfelle vil vi søke i test– og numeric-mappene.

find ./test ./numeric -name file22.txt -type f

Eksempelresultat:

./test/file22.txt
/root/numeric/file22.txt

Finne flere filer med ulike filendelser fra alle mapper

Du kan bruke find-kommandoen for å finne flere filer som deler ulike filtyper som *.doc, *.txt, *.pdf, etc. Dette kan gjøres separat, én filendelse om gangen, eller med én kommando som inkluderer alle ønskede filendelser.

find . -type f \( -name "*.txt" -o -name "*.pdf" -o -name "*.doc" \)

Eksempelresultat:

./test/subtest/subfil.txt
./test/qatree.pdf
./test/file22.txt
./test/qa.txt
./test/file30.doc
./books/acro.pdf
./data1/FILE22.txt
./docs/files32.txt

Finne filer som inneholder bestemt tekst

Noen ganger ønsker du å finne en fil som inneholder en bestemt tekststreng, men du husker ikke filnavnet eller plasseringen. Denne kommandoen lar deg finne alle filer som inneholder den spesifikke teksten.

For å søke etter alle filer som inneholder ordet «hyperkonvergens», bruk:

find / -type f -exec grep -l -i "hyperkonvergens" {} ;

Eksempelresultat:

/root/numeric/hci
/root/HCIP

-i-alternativet gjør at kommandoen ignorerer forskjellen mellom store og små bokstaver, og vil finne teksten uavhengig av hvordan den er skrevet (f.eks. hyperkonvergens, Hyperkonvergens).

For å søke etter filer i en bestemt mappe, legg til denne mappen i kommandoen:

find ./numeric -type f -exec grep -l -i "hyperkonvergens" {} ;

Eksempelresultat:

./numeric/hci

Utforsk flere eksempler på grep-kommandoer.

Finne Filer og Mapper Basert På Størrelse

Du kan finne alle filer eller mapper som er mindre, like eller større enn en bestemt størrelse, innenfor et visst område eller tomme. Bruk de passende størrelsesformatene avhengig av filene eller mappene du leter etter.

Størrelsesalternativer inkluderer:

c byte
k kilobyte
M Megabyte
G Gigabyte

Finne filer av en spesifikk størrelse – eksakt 30 MB

For å søke etter alle filer som er nøyaktig 30 MB, bruk:

find / -size 30M

Finne filer som er større enn en spesifikk størrelse

find -size +2M

Eksempelresultat:

./Downloads/ubuntu18043.iso 
./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c

Finne filer som er mindre enn 10 MB i gjeldende mappe

find . -type f -size -10M

Finne filer med størrelse mellom 100-200 MB

Når du søker etter filer innenfor et spesifikt område, for eksempel mellom 100 og 200 MB:

find / -size +100M -size -200M

Søke etter mapper som er større enn 20 KB

find / -type d -size +20k

Finne tomme filer og mapper

Filer:

find ./ -type f -size 0

eller

find ./ -type f –empty

Mapper:

find ./ -type d –empty

Finne filer etter alder eller endringstid

Finne filer som er eldre enn n dager:

find /path/ -type f -name '*.txt' -mtime +8

-mtime +8 vil søke etter txt-filer som er eldre enn 8 dager.

Etter endringstidspunkt

Dette vil søke etter filer som har blitt endret de siste 17 timene:

find . -mtime -17 -type f

Søke etter mapper som har blitt endret de siste 10 dagene:

find . -mtime -10 -type d

Finne filer basert på tilgang eller endring

Finn filer basert på dato og klokkeslett for tilgang. Dette lar deg se filer som har eller ikke har blitt åpnet i en spesifisert periode.

For å se filer som ikke har blitt åpnet de siste 10 dagene i hjemmemappen:

find /home -atime +10

Filer som ble åpnet for nøyaktig 10 dager siden:

find /home -atime 10

Tilgang i løpet av de siste 10 dagene:

find /home -atime -10

Finne filer som har blitt endret de siste n dagene

Du kan også søke etter filene i /home-mappen som har blitt endret de siste 10 dagene ved å bruke kommandoen:

find /home -mtime -10

Finne filer som har blitt endret i løpet av en bestemt periode

For eksempel, alle filer som har blitt endret mellom 6 og 15 dager siden i hjemmemappen:

find /home -type f -mtime +6 -mtime -15

Filer og mapper som har blitt åpnet de siste 10 minuttene

For å finne filer som har blitt åpnet de siste 10 minuttene, bruk -amin-alternativet.

find . -amin -10 -type f

Eksempelresultat:

./.bash_history
./[email protected]:~#

Mapper som har blitt åpnet de siste 10 minuttene:

find . -amin -10 -type d

Finne Filer Som Samsvarer Med Spesifikke Tillatelser

Syntaks:

$ find -perm modus

Hvor modus er tillatelsen som enten er numerisk (som 644, 655, 700, 777 osv.) eller bokstavbasert (som u=x, a=r+x osv.).

Du kan spesifisere modus på tre forskjellige måter:

  • Uten prefiks, for å finne filer med eksakt de spesifiserte tillatelsene.
  • Med - foran, for filer som har minst de angitte tillatelsene. Dette returnerer filer med de spesifiserte, i tillegg til høyere tillatelser.
  • Med / foran, krever spesifikasjon av eier eller gruppe med tillatelse til filen.

Finne filer med tillatelse 777

find -perm 777

Eksempelresultat:

./file1

Finne filer med minst 766

find -perm -766

Eksempelresultat:

./file2
./file1

Kommandoen søker etter alle filer der:

  • Filens eier har lese-/skrive-/utføringsrettigheter.
  • Gruppen har lese-/skriverettigheter.
  • Andre har lese-/skriverettigheter.

Derfor returnerer den to filer som oppfyller dette kriteriet – file1 og file2. Filene trenger ikke å ha nøyaktig 766-tillatelser, men kan ha flere så lenge de har minst de spesifiserte.

Finne filer som kan skrives av eieren

Vi vil nå bruke / for å søke etter filer som kan skrives av enten eieren, gruppen eller andre.

find -perm /222

Eksempelresultat

.
./file2
./file3
./file1

Ovennevnte kommando søker etter filer som kan skrives av enten eieren eller gruppen.

Dette returnerer filer som kan skrives av begge, men ikke nødvendigvis begge. For å se filer der begge har skrivbare tillatelser, bruk --prefikset.

find -perm -220

Eksempelresultat:

./file2
./file1

Finne filer som eies av en bruker

Finne alle filer som eies av Jack:

find /home -user jack

Eksempelresultat:

/home/jack
/home/jack/examples.desktop
/home/jack/.gnupg
/home/jack/.gnupg/private-keys-v1.d
/home/jack/ans.cgi

Finne spesifikke filer som eies av en bruker

Finne alle tekstfiler som eies av Jack:

find /home -user jack -iname "*.txt"

Eksempelresultat:

/home/jack/docs/file32.txt

Finne og liste filer og mapper sammen med deres tillatelser

find -name "*.conf" | ls -l

Eksempelresultat:

total 120
drwxr-xr-x 2 root root 4096 Dec 31 13:19 backup2
drwxr-xr-x 2 root root 4096 Jan 4 11:57 Desktop
drwxr-xr-x 2 root root 4096 Dec 31 11:50 Documents
drwxr-xr-x 2 root root 4096 Dec 31 12:27 Downloads
-rw-r--r-- 1 root root 0 Jan 4 12:02 file22.doc
drwxr-xr-x 2 root root 4096 Jan 4 12:14 file23
-rw-r--r-- 1 root root 0 Jan 4 12:23 file23.txt

Finne Og Utføre Handlinger På Resultatene

I denne delen skal vi se hvordan du kan utføre handlinger på filene som samsvarer med mønsteret spesifisert i find-kommandoen.

Finne filer og endre tillatelser

Finne og endre tillatelser for bestemte filtyper. I vårt tilfelle vil vi arbeide med PHP-filer med ulike tillatelser, som vist nedenfor:

[email protected]:~/ver$ ls -la

total 8
drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 .
drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 ..
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php
-rw-rw-r-- 1 jack jack 0 Jan 3 14:11 base.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php
-rw-rw-r-- 1 jack jack 0 Jan 3 14:11 qust.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php
-rw-rw-r-- 1 jack jack 0 Jan 3 14:11 vary.php

Vi vil nå søke etter alle PHP-filene (over) og endre tillatelsene til 755:

find ver -name "*.php" -type f -exec chmod 755 {} ;

Kommandoen søker etter PHP-filer i ver-mappen og setter deretter deres tillatelser til 755 (rwxr-xr-x).

Resultater:

[email protected]:~/ver$ ls -la
total 8
drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 .
drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 ..
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:11 base.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:11 qust.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:11 vary.php

Finne og endre fil- og mappetillatelser

Finne filer med 644 tillatelser og endre dem til 655 tillatelser:

find . -type f -perm 644 -exec chmod 655 {} ;

Du kan også søke etter mapper med 644 tillatelser og endre dem til 755:

find . -type d -perm 644

Eksempelresultat:

./docs   

docs-mappen har 644 tillatelser:

drwxrwxr-x 2 jack jack 4096 Jan 3 12:45 docs

For å sette den til 755, kjører vi:

find . -type d -perm 644 -exec chmod 755 {} ;

Nå kan vi sjekke igjen for å se nøyaktig hva 755 er:

find . -type d -perm 755

Eksempelresultat:

.
./docs

Ovenfra kan vi se at rot- og docs-mappene har 755 tillatelser.

ls -la-kommandoen gir følgende detaljer:

drwxr-xr-x 2 jack jack 4096 Jan 3 12:45 docs

Finne og kopiere filer eller mapper

Finne og kopiere en bestemt fil til en mappe:

Kommandoen nedenfor vil finne filen file22.txt og kopiere den til ~/tmp/images-mappen:

find -iname file22.txt -exec cp {} ~/tmp/images ;

Finne og kopiere én type filer til en mappe:

For å finne bildefiler med jpg-endelse i gjeldende mappe og kopiere dem til en annen plassering, for eksempel en bildemappe, bruk:

find -iname '*.jpg' -exec cp {} ~/tmp/images ;

Dette vil finne og kopiere alle jpg-filene til ~/tmp/images-mappen.

Finne og kopiere én fil til flere mapper

Finne og kopiere en enkelt fil til flere mapper:

find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {} ;

Dette vil finne hci-filen og kopiere den til de tre mappene /tmp/dir1/, /tmp/dir2/ og $HOME/3/.

Finne og flytte filer til en annen mappe

For å flytte en kjent fil fra en mappe til en annen. For å flytte filen universal.php:

find ~/folder/ -type f -name universal.php -exec mv {} ~/numeric/ ;

Søke og flytte filer med en bestemt endelse til en annen mappe:

find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/ ;

Finne spesifikke filer og flytte dem til en annen mappe

find -type f -name uni*.* -exec mv {} ~/unifiles/ ;

Kommandoen søker etter alle filer med navn som begynner med uni og som har en filtype. Den flytter dem deretter til /unifiles/-mappen.

Finne og flytte filer basert på alder

Finne og flytte filer som er eldre enn et visst antall dager til et annet sted, for eksempel arkivet:

find /path/ -type f -name '*.pdf' -mtime +20 -exec mv {} /backup1/ ;

Dette vil søke etter pdf-filer som er eldre enn 20 dager og flytte dem til backup1-mappen.

Finne og slette filer og mapper

Syntaksen for å finne og fjerne filer eller mapper i gjeldende mappe er:

find . -type f -name "fil-som-skal-slettes" -exec rm -f {} ;, for å slette filer, eller

find . -type d -name "mappe-som-skal-slettes" -exec rm -rf {} ;, for å slette mapper.

Finne og slette kun bestemte filer

For å finne og slette filer som begynner med til, bruk:

find . -type f -name "til*" -exec rm {} ;

For å finne og slette mapper som begynner med til:

find . -type d -name "til*" -exec rm {} ;

Fjerne både filer og mapper

find . -name "til*" -exec rm -rf {} ;

Dette vil fjerne både filer og mapper som begynner med bokstavene til.

Slette filer basert på filendelse

Nedenfor er hvordan du kan finne og slette alle txt-filer i gjeldende mappe. Erstatt txt-filen med en annen filendelse, for eksempel bak, pdf eller en annen du ønsker å fjerne.

find . -type f -name "*.txt" -exec rm -f {} ;

Hvis du vil at systemet skal be deg om å bekrefte før du sletter hver fil, legg til -i-alternativet som nedenfor:

find . -type f -name "*.txt" -exec rm -i {} ;

Eksempelresultat:

rm: remove regular empty file './File22.txt'? y
rm: remove regular empty file './file22.txt'? y
rm: remove regular empty file './file23.txt'?

Som standard vil -rm ikke fjerne mapper, og du må bruke -r-alternativet for å sikre en rekursiv fjerning. Dette sørger for sletting av tomme mapper og de som inneholder filer. Alternativet -f tvinger fjerningen og brukes for både filer og mapper.

Finne og slette filer som er eldre enn n dager

Finne og slette sikkerhetskopifiler som er eldre enn 20 dager fra gjeldende mappe:

find . -type f -name '*.bak' -mtime +20 -exec rm {} ;

Dette vil slette alle .bak-filer som er eldre enn 20 dager.

Finne og slette kun mapper

For å slette en mappe som heter dir22:

find . -type d -name dir22 -exec rm -rf {} ;

Sørg for at du samsvarer med mappenavnet eller bruk alternativet -iname:

find . -type d -iname Dir22 -exec rm -rf {} ;

Dette fjerner både Dir22 og dir22.

For å bekrefte før sletting, bruk -i-alternativet:

find . -type d -iname Dir22 -exec rm -rf -i {} ;

Eksempelresultat:

rm: fjerne katalogen «./Dir22»? n
rm: fjerne katalogen «./dir22»? y

I vårt tilfelle skrev vi n for mappen Dir22 som ikke vil bli slettet, og y for mappen dir22 som nå vil bli fjernet.

Finne og fjerne tomme filer

Du kan bruke hvilken som helst av følgende kommandoer for å finne tomme filer og slette dem automatisk:

find ./ -type f -size 0 -exec rm -f {} ;

eller

find ./ -type f -size 0 | xargs rm -f

eller

find ./ -type f -size 0 -delete

Finne og fjerne tomme mapper

For å fjerne tomme mapper, bruker vi d-alternativet:

find ./ -type d -empty -exec rmdir {} ;

Et annet alternativ er å bruke delete istedenfor rmdir:

find ./ -type d -empty -delete

Vær oppmerksom på at sletting av systemfiler eller kritiske filer fra datamaskinen din kan skade operativsystemet eller applikasjoner, eller føre til tap av viktig data.

For å unngå utilsiktede slettinger er det best å bruke en ikke-root-brukerkonto. Pass også på at du sletter de riktige filene som ikke er nyttige, og at du har en sikkerhetskopi av alle datafiler i tilfelle.

Hva blir det neste?

Prøv de nevnte Linux find-kommandoene i laboratoriet eller et ikke-produksjonsmiljø. Se om du kan bruke noen av dem til å automatisere filsystemopprydding med Crontab. Og for å mestre Linux, sjekk ut dette nettkurset.