Sådan finder du filer i Linux ved hjælp af kommandolinjen

find er en kommando til rekursivt at filtrere objekter i filsystemet baseret på en simpel betingelsesmekanisme. Brug find til at søge efter en fil eller en mappe i dit filsystem. Ved hjælp af -exec-flaget kan filer findes og straks behandles inden for den samme kommando.

Find Linux-filer efter navn eller udvidelse

Brug find fra kommandolinjen for at finde en bestemt fil efter navn eller udvidelse. Følgende eksempel søger efter *.err-filer i mappen /home/username/ og alle undermapper:

find /home/username/ -name "*.err"

Du bør se et lignende output i konsollen:

 /home/username/example.errThe matching file in the /home/username/ directory is "example.err"

Gængse Linux Find-kommandoer og syntaks

Kommandoen find har normalt følgende form:

find options starting/path expression
  • Attributten options styrer opførslen og optimeringsmetoden for find-processen.
  • Attributten starting/path definerer den øverste mappe, hvor find begynder at filtrere.
  • Attributten expression styrer de tests, der søger i mappehierarkiet for at producere output.

Find en fil i Linux ved hjælp af filnavnet

For at finde en fil ved hjælp af filnavnet skal du bruge syntaksen find -name filename. Hvis du udelader stien, søger du efter filen på hele disken. Du kan f.eks. finde en fil med navnet example.err, der ligger i din /home/username-mappe, med følgende kommando:

find -name example.err

Du bør se et lignende output:

 ./username/example.err

Find en fil i din aktuelle mappe ved hjælp af Find-kommandoen

Se på eksempelmappestrukturen og -filerne. Der henvises til dem i alle eksemplerne i denne vejledning.

 ├── directory_1│ ├── subdirectory_1│ │ └── example.err│ └── example.err├── directory_2│ └── example.err├── directory_3│ └── example.err├── image01.png├── web_files│ ├── app.html│ ├── cb=gapi.loaded_0│ ├── edit.html│ ├── m=_b,_tp│ ├── rs=AA2YrTtgyE1yYXiu-GuLS6sbJdYr0u8VBQ│ ├── rs=AA2YrTvod91nzEJFOvvfJUrn6_vLwwY0bw│ ├── saved_resource.html│ ├── single.html│ └── unnamed.jpg├── web.html└── example.err

Hvis du befinder dig i directory_1, og du vil finde filen example.err i mappen eller en af dens undermapper, kan du sende følgende kommando:

find . -name example.err

Din uddata ligner følgende:

 ./example.err./directory_1/example.err

Opdatet afspejler directory_1s mappestruktur:

 ├── directory_1│ ├── subdirectory_1│ │ └── example.err│ └── example.err

Find billedfiler i Linux ved hjælp af kommandolinjen

Hvis vi henviser til filstrukturen i det foregående afsnit, er der et billede ved navn image01.png, der er placeret ved roden (/)s af mappestrukturen.

For at finde filen image01.png skal du køre følgende find-kommando, som finder alle .png-filer, der er gemt i mappen /.

find -name *.png

Du bør se et lignende output:

 ./image01.png

Ændre billedfiltypen og lede efter alle .jpg-filer i rodmappen (/):

find -name *.jpg

Opdatet ligner eksemplet. Se eksemplets mappestruktur i det foregående afsnit for at få vist filens placering.

 ./web_files/unnamed.jpg

Find en tom fil i din mappe ved hjælp af kommandolinjen

For at finde en tom fil i din mappe ved hjælp af kommandolinjen skal du sende følgende kommando:

find . -type f -empty

Hvis der ikke returneres noget output, er der ikke en tom fil i din aktuelle mappe.

Optioner og optimeringer til søgning af filer i Linux ved hjælp af kommandolinjen

Den standardkonfiguration for find ignorerer symbolske links. Hvis du vil have find til at følge og returnere symbolske links, skal du tilføje -L-indstillingen til kommandoen, som vist nedenfor:

find -O3 -L /var/www/ -name "*.html"

Denne kommando aktiverer det maksimale optimeringsniveau (-O3) og tillader find at følge symbolske links (-L). find søger i hele mappetræet under /var/www/ efter filer, der slutter med .html.

find optimerer sin filtreringsstrategi for at øge ydeevnen. Tre optimeringsniveauer, der kan vælges af brugeren, er angivet som -O1, -O2 og -O3. -O1-optimeringen er standard og tvinger find til at filtrere baseret på filnavn, før alle andre tests køres.

Optimering på -O2-niveauet prioriterer filnavnsfiltre, som i -O1, og kører derefter al filtypefiltrering, før der fortsættes med andre mere ressourcekrævende betingelser. Optimering på niveau -O3 giver find mulighed for at udføre den strengeste optimering og omordner alle tests baseret på deres relative omkostninger og sandsynligheden for, at de lykkes.

Kommando Beskrivelse
-O1 Filtrer først baseret på filnavn (standard).
-O2 Filnavn først, derefter filtype.
-O3 Giv find mulighed for automatisk at omarrangere søgningen baseret på effektiv udnyttelse af ressourcer og sandsynlighed. af succes
-maxdepth X Søgning i den aktuelle mappe samt i alle undermapper X niveauer dybt.
-iname Søgning uden hensyntagen til tekstcase.
-not Returnerer kun resultater, der ikke passer til testcasen.
-type f Søg efter filer.
-type d Søg efter mapper.

Find filer i Linux efter ændringstidspunkt ved hjælp af kommandolinjen

Kommandoen find kan filtrere et mappehierarki baseret på, hvornår en fil sidst er blevet ændret. Følgende kommando finder f.eks. enhver fil med filtypenavnet .err, der er blevet ændret inden for de sidste 7 dage:

find / -name "*err" -mtime -7

Eksempelkommandoen returnerer følgende output:

 /home/username/directory_3/example.err/home/username/username/example.err/home/username/username/directory_2/example.err/home/username/username/directory_1/example.err/home/username/username/directory_1/subdirectory_1/example.err

Brug Grep til at finde filer i Linux ved hjælp af kommandolinjen

Kommandoen find kan kun filtrere mappehierarkiet på baggrund af en fils navn og metadata. Hvis du har brug for at søge på grundlag af filens indhold, skal du bruge et værktøj somegrep. Overvej følgende eksempel:

find . -type f -exec grep "test" '{}' \; -print

Denne kommando søger i alle objekter i det aktuelle mappehierarki (.), der er en fil (-type f), og kører derefter kommandoen grep "test" for hver fil, der opfylder betingelserne. De filer, der opfylder betingelserne, udskrives på skærmen (-print). De svungne parenteser ({}) er en pladsholder for resultaterne af find-matchet. {} er omsluttet af enkelte anførselstegn (') for at undgå at aflevere grep et misdannet filnavn. Kommandoen -exec afsluttes med et semikolon (;), som bør eskapes (\;) for at undgå at blive fortolket af shell’en.

Den fil, der bruges i eksemplet (example.err), har tekst inde i den, hvor der står “test”. Når du kører kommandoen i eksemplet, vises et lignende output:

 test./directory_3/example.errtest./example.errtest./directory_2/example.errtest./directory_1/example.errtest./directory_1/subdirectory_1/example.err

Grep identificerede alle filer i den aktuelle arbejdskatalog, der indeholder strengen “test”.

Bemærk

Forinden find-kommandoens implementering af -exec-indstillingen kunne du generere et lignende output som i eksemplet ovenfor ved hjælp af xargs-kommandoen:

find . -type f -print | xargs grep "test"

Behandle og finde filer ved hjælp af Find-kommandoen i Linux

Den -exec-indstilling kører kommandoer mod hvert objekt, der matcher find-udtrykket. Overvej følgende eksempel:

find . -name "example.err" -exec chmod o+r '{}' \;

Dette filtrerer alle objekter i det aktuelle hierarki (.) for filer med navnet rc.conf og kører kommandoen chmod o+r for at ændre filtilladelserne for resultaterne af find-kommandoen.

Eksempelkommandoen kører og udfører -exec-indstillingen i rodmappen for find-processen. Brug -execdir til at udføre den angivne kommando i den mappe, hvor matchet befinder sig. Dette kan afhjælpe sikkerhedsproblemer og give bedre ydeevne for visse operationer.

Optionerne -exec eller -execdir køres uden yderligere opfordringer. Hvis du foretrækker at blive spurgt, før der handles, skal du erstatte -exec med -ok eller -execdir med -okdir.

Sådan finder og sletter du filer ved hjælp af Linux-kommandolinjen

Forsigtighed

Brug denne indstilling med ekstrem forsigtighed.

Føj indstillingen -delete til sidst i et matchudtryk for at slette alle filer, der matcher. Brug denne indstilling, når du er sikker på, at resultaterne kun svarer til de filer, du ønsker at slette.

I eksemplet nedenfor finder find rekursivt alle filer i hierarkiet fra den aktuelle mappe og sletter alle filer, der slutter med filtypenavnet .err:

find . -name "*.err" -delete

Har du stadig nogle spørgsmål?

Gå med i vores fællesskab, og skriv dine spørgsmål, så andre Linux- og Linux-entusiaster kan hjælpe dig.

Relaterede spørgsmål:

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.