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
- Gængse Linux Find-kommandoer og syntaks
- Find en fil i Linux ved hjælp af filnavnet
- Find en fil i din aktuelle mappe ved hjælp af Find-kommandoen
- Find billedfiler i Linux ved hjælp af kommandolinjen
- Find en tom fil i din mappe ved hjælp af kommandolinjen
- Optioner og optimeringer til søgning af filer i Linux ved hjælp af kommandolinjen
- Find filer i Linux efter ændringstidspunkt ved hjælp af kommandolinjen
- Brug Grep til at finde filer i Linux ved hjælp af kommandolinjen
- Behandle og finde filer ved hjælp af Find-kommandoen i Linux
- Sådan finder og sletter du filer ved hjælp af Linux-kommandolinjen
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 forfind
-processen. - Attributten
starting/path
definerer den øverste mappe, hvorfind
begynder at filtrere. - Attributten
expression
styrer de tests, der søger i mappehierarkiet for at producere output.
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_1
s 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 afxargs
-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: