Trinvise eksempler på find-kommandoen i Linux

Sidste ændring: 22/02/2026
Forfatter: Isaac
  • Kommandoen "find" giver dig mulighed for at søge efter filer og mapper efter navn, type, størrelse, datoer, tilladelser, ejer og meget mere.
  • Flere filtre og logiske operatorer (OG, ELLER, IKKE) kan kombineres for at skabe meget præcise og effektive søgninger.
  • Ved at bruge -exec og xargs er det muligt at handle direkte på resultaterne af find: slette, kopiere, flytte, komprimere eller ændre tilladelser.
  • Find integreres nemt med andre værktøjer som grep, hvilket muliggør indholdsbaserede søgninger ud over metadata.

Eksempler på find-kommandoen i Linux

Hvis du ofte arbejder med GNU/Linux-terminalen, får du før eller siden brug for en god kommandolinjefilfinder . Det er her `find` -kommandoen kommer ind i billedet , en af ​​de gamle venner fra UNIX-verdenen, der måske virker skræmmende i starten, men når du først får styr på den, bliver den uundværlig.

Med find kan du finde filer og mapper i et mappetræ ved hjælp af næsten alle kriterier, du kan forestille dig: navn, filtypenavn, størrelse, adgangs- eller ændringsdatoer, tilladelser, ejer, gruppe, filtype (normal, mappe, symbolsk link…), dybdeniveau og endda logiske kombinationer af flere betingelser.

Hvad er find-kommandoen præcist, og hvordan bruges den?

`find`-kommandoen er en del af de klassiske UNIX-værktøjer og er tilgængelig i stort set alle GNU/Linux-distributioner. I modsætning til værktøjer som `locate` , der bruger en database, scanner `find` filsystemet i realtid, så den altid arbejder med opdaterede oplysninger.

Den generelle syntaks for find er normalt skrevet således:

find

I denne struktur, den Den indledende rute angiver, hvor søgningen begynder.Det kunne være roden / for hele systemet, den aktuelle mappe .din personlige mappe ~ eller enhver absolut eller relativ sti, du har brug for.

Ruten er angivet nedenfor. filtreringsmuligheder og udtryk: efter navn, type, størrelse, tidspunkt, tilladelser, ejer osv. Disse betingelser kan kombineres og også ledsages af en den endelige handling (for eksempel slette, kopiere, liste i detaljer) ved hjælp af parametre som f.eks. -exec eller integration xargs.

Søg efter filer og mapper efter navn

Den hyppigste brug af find er at søge efter navn eller navnemønster , uanset om det er en specifik fil eller en gruppe af filer, der matcher et udtryk.

For at finde en fil med et bestemt navn fra den aktuelle mappe og gå ned gennem dens undermapper, ville en kommando som denne være tilstrækkelig:

find . -name archivo22.txt

Denne kommando viser alle stier, hvor en fil med præcis det navn vises . Hvis du vil indsnævre søgningen til en anden mappe, kan du f.eks. skrive:

find ./prueba -name archivo22.txt

Du kan også bruge jokertegn til at registrere flere filer på én gang. For eksempel, for at finde alle elementer, hvis navn starter med "fil", i en bestemt mappe:

find ./prueba -name "archivo*"

Hvis du skal søge efter udvidelsen , vil det klassiske mønster se nogenlunde sådan ud:

find . -name "*.txt"

Her beder du `find` om at returnere alle filer og mapper, hvis navn ender på `.txt` , startende fra den aktuelle placering. For en anden mappe skal du blot ændre startstien:

find /ruta/a/buscar -name "*.html"

Husk på, at parameteren -navnet skelner mellem store og små bogstaverHvis du ikke er sikker på, hvordan det staves (for eksempel "mystuff", "MyStuff", "MYSTUFF"...), er det nemmeste at bruge -iname:

find . -iname "mystuff"

Kommandoen -iname udfører en søgning uden at skelne mellem store og små bogstaver , hvilket er meget nyttigt, når du kun husker en del af det omtrentlige navn.

Styr typen af ​​resultat: kun filer, kun mapper, links osv.

Som standard kan find returnere både almindelige filer og mapper og andre typer posterFor at begrænse resultatet bruges funktionen -type med et bogstav, der angiver filtypen.

De mest almindelige typer er f for almindelige filer , d for mapper og l for symbolske links , selvom der er flere (tegn, blokke, sockets osv.). For eksempel, for kun at søge efter filer (ikke mapper) med et bestemt navn:

find . -type f -name "mystuff"

Hvis du derimod vil finde specifikke mapper , kan du bruge:

find . -type d -name "qa*"

Du kan også kombinere filtypen med filtypenavnet. Et typisk eksempel: at finde alle C++-kodefilerne i dit projekt:

find . -type f -name "*.cpp"

Det er vigtigt at omsætte mønsteret i anførselstegn for at forhindre skallen i at udvide stjernen, før `find` behandler den. Hvis du ikke gør det, vil jokertegnet blive erstattet af navnene i den aktuelle mappe, og kommandoen kan muligvis stoppe med at virke som forventet.

Når du vil have find til at arbejde på flere mapper på én gang , kan du angive dem alle i begyndelsen af ​​kommandoen:

find ./location1 /second/location -type f -name "pattern"

Begræns søgedybden og ekskluder ruter

Find kørsler som standard søg rekursivt i alle undermapperNogle gange er det for meget, for eksempel hvis du kun er interesseret i, hvad der er i den aktuelle mappe. For at kontrollere dybden bruger du -maxdepth og, valgfrit, -mindepth.

Hvis du kun vil se det aktuelle niveau og ikke gå ind i undermapper , kan du bruge:

find . -maxdepth 1 -type f -name "*.txt"

Parameter -mindepth Det giver dig mulighed for f.eks. ignorer din egen hjemmemappe og begynd at returnere resultater fra det første indre niveau.

Et andet almindeligt behov er Udeluk specifikke mapper fra søgningenDette opnås ved at kombinere -path med -prune og operatøren -o (ELLER). Et klassisk eksempel ville være:

  Sådan afinstalleres drivere i Windows 11

find . -path "./directory_exclude/*" -prune -o -name "SEARCH_NAME"

her -beskære angiver ikke at gå ned ad den angivne rute, og med -o Det siges, at de resterende betingelser kun evalueres for det, der ikke er blevet "beskåret". Dette er et meget nyttigt trick til at omgå f.eks. backupmapper, midlertidige mapper eller store arkiver.

Søg efter størrelse: store filer, små filer og intervaller

Parameter -size tillade filtrer filer baseret på deres størrelseDet er især nyttigt til at registrere store filer, der optager for meget plads, eller til at rydde op i unødvendige små filer.

Grundformen er:

find -size N

De mest almindelige enheder er c (bytes), k (KB), M (MB) og G (GB) . Tallet kan efterfølges af + (større end), – (mindre end) eller lades uden præfiks (nøjagtig størrelse). For eksempel, for at søge efter filer på præcis 300 MB:

find . -size 300M

Hvis du vil finde alt, der vejer mere end 300 MB :

find . -size +300M

Sådan finder du filer, der er mindre end 300 MB:

find . -size -300M

Det er også muligt at definere størrelsesintervaller . For eksempel filer mellem 270 og 300 MB:

find . -size +270M -size -300M

Hvis du har brug for noget endnu mere ekstremt, kan du f.eks. søge efter filer, der er større end 1 GB eller større end 500 MB på tværs af hele systemet:

find / -size +1G

find / -size +500M

Og selvfølgelig, kombiner størrelse med navn . Et typisk tilfælde: gigantiske logfiler i rodmappen:

find / -size +500M -name "*.log"

Søg efter tomme filer og tomme mapper

Systemerne fyldes op med tiden tomme filer og mapper som ikke længere er nyttige. Find tilbyder muligheden -empty at opdage dem hurtigt.

Sådan finder du noget tomt (filer eller mapper) :

find . -empty

Hvis du kun er interesseret i tomme filer , kan du angive typen:

find . -type f -empty

Og hvis du leder efter tomme mapper :

find . -type d -empty

Når de er fundet, kan de kombineres med handlinger, der sletter dem automatisk, hvis de er i vejennoget vi senere skal se med -delete y -exec.

Søgninger efter dato: mtime, atime, ctime, minutter og intervaller

GNU/Linux registrerer tre grundlæggende tidsstempler for hver fil : hvornår den blev tilgået, hvornår dens indhold blev ændret, og hvornår dens metadata (tilladelser, ejer osv.) blev ændret. Find kan filtrere baseret på enhver af disse.

De vigtigste parametre er:

  • -atime / -aminbaseret på tidspunktet for sidste adgang (dage eller minutter).
  • -mtid / -mminbaseret på den seneste indholdsændring.
  • -ctime / -cminbaseret på den seneste tilstandsændring (tilladelser, ejer, links osv.).

Sådan finder du filer, der er ændret for mere end 7 dage siden i den aktuelle sti:

find . -mtime +7

Hvis du leder efter filer, der blev tilgået for mindre end 15 dage siden :

find . -atime -15

Du kan også arbejde med tidsintervaller . For eksempel: filer, hvis tilstand ændrede sig for mellem 2 og 6 minutter siden:

find . -cmin +2 -cmin -6

Når du har brug for finere kontrol ned til minuttet, kommer -mmin, -amin og -cmin i spil . For eksempel filer, hvis indhold er blevet ændret inden for de sidste 5 minutter:

find . -type f -mmin -5

Eller Java-filer ændret for mellem 20 og 30 minutter siden, hvor navn og område er kombineret:

find . -type f -mmin +20 -mmin -30 -name "*.java"

En anden interessant mulighed er `-newer` , som giver dig mulighed for at sammenligne datoer mellem filer . For eksempel, for at få alle filer, der er nyere end en given referencefil:

find / -newer mi_archivo

Filtrer efter ejer, gruppe og forældreløse filer

I flerbrugersystemer eller servere er det meget nyttigt at kunne finde filer i henhold til deres ejer eller gruppe , for eksempel for at kontrollere, hvad hver konto har, eller opdage mærkelige ting.

Sådan finder du alle filer, der tilhører brugeren "juan", i den aktuelle mappe:

find . -type f -user juan

Hvis du også kun er interesseret i, f.eks. bestemte filtyper , kan du tilføje navnebetingelsen:

find . -type f -user juan -name "*.cpp"

Med mulighed -group Du gør det samme, men efter gruppe. For eksempel filer fra gruppen “flossblog”:

find . -group flossblog -type f

Find understøtter også UID- og GID-intervaller ved hjælp af -uid og -gid , hvilket giver dig mulighed for at finde filer, der tilhører en gruppe brugere numerisk. For eksempel filer fra brugere, hvis UID er mellem 500 og 1000 (eksklusive slutpunkterne):

find . -uid +500 -uid -1000 -type f

Derudover er der filtrene -nouser og -nogroup , som er meget nyttige til at detektere forældreløse filer , dvs. filer, der ikke tilhører nogen gyldig bruger eller gruppe på systemet:

find . -nouser

find . -nogroup

Søg efter tilladelser og adgangstilstande

Parameter -perm tillade find filer baseret på deres tilladelserenten præcist eller baseret på specifikke elementer. Der er også genveje som f.eks. -readable, -writable y -executable for at filtrere efter, hvad din nuværende bruger kan gøre.

Sådan finder du alle filer, som den aktuelle bruger kan læse :

find . -readable

Hvis du vil vide, hvilke filer du kan ændre :

find . -writable

Og for dem der er eksekverbare for dig :

find . -executable

Når du skal arbejde med numeriske tilstande som 644, 755, 777 osv. , er syntaksen:

find . -perm 777

I dette tilfælde søges der efter filer, hvis tilstanden matcher præcis 777. Imidlertid -perm Den accepterer præfikser, der ændrer adfærd:

  • Uden præfiks: den matcher kun, hvis tilstanden er præcis som angivet.
  • med - foran: filen Han har i det mindste de tilladelser (kan have flere).
  • med / forude: det matcher hvis nogen af ​​bitsene PMODE er til stede.
  Komplet guide til måling af SSD IOPS og latenstid på Windows og Linux

For eksempel, for at finde alle filer, hvis ejer og gruppe har læse- og skriveadgang, og resten kun har læseadgang , præcis:

find . -perm 664

Hvis du tilføjer præfikset -Filer som 666, 777 og 776 vil også blive genereret, forudsat at indeholde mindst 664 bits:

find . -perm -664

På den anden side, kigger man med /222 du får filer, der kan skrives af nogen (ejer, gruppe eller andre):

find . -perm /222

Ydelsesoptimering: muligheder -O1, -O2 og -O3

I systemer med enorme katalogtræerEffektiviteten af ​​`find` kan gøre hele forskellen. GNU `findutils` leverer optimeringsniveauer gennem mulighederne -O1, -O2 y -O3.

-O1- indstillingen bruger standardkonfigurationen og prioriterer filnavnstests frem for andre, mere ressourcekrævende tests. For eksempel:

find -O1 /ruta -name "*.html"

-O2- indstillingen giver find mulighed for internt at sortere filnavn- og typetests før resten, hvilket yderligere optimerer processen:

find -O2 /ruta -type f -name "*.html"

Endelig lader -O3 sig selv omorganisere filtrene baseret på sandsynlighed for succes og omkostninger , idet der søges maksimal samlet effektivitet:

find -O3 /ruta -name "*.html"

Kombinér betingelser: AND, OR, NOT og regulære udtryk

En af finds største styrker er, at det giver dig mulighed for at kombinere flere logiske betingelser . Faktisk fungerer det internt med en slags udtrykssprog, som du kan komponere.

At kombinere betingelser med AND kan bruges eksplicit -and eller blot efterlade et mellemrum mellem betingelserne (OG er standardfunktionen). For eksempel filer mellem 500 MB og 1 GB:

find /ruta -size +500M -and -size -1G

Med -or (eller forkortet -o ) kan du søge efter filer, der opfylder mindst én af flere betingelser . For eksempel DOCX- eller ODT-dokumenter:

find /ruta -name "*.docx" -or -name "*.odt"

Hvis du vil udelukke noget, du har -ikke eller symbolet ! (normalt med et omvendt skråstreg i begyndelsen, så skallen ikke fortolker det). For eksempel .docx-filer, der ikke er .odt:

find /ruta -name "*.docx" -not -name "*.odt"

Find understøtter også komplette regulære udtryk hjælp -regex y -regextypeDette muliggør konstruktion af meget fine filtre, som f.eks. projektmapper, der ikke er kopier, gamle versioner eller har bestemte suffikserEt lidt mere uddybet mønster kunne være:

PATTERN=".*/((.*(|old|ba?c?ku?ps?))|(..*)|(copy|new|backup|back|).*)$"

find proyectos -maxdepth 1 -mindepth 1 -regextype posix-egrep ! -iregex "$PATTERN" ! -empty -type d

Brug find sammen med grep til at søge efter indhold

Selvom `find` er utrolig fleksibel, analyserer den ikke filindhold alene ; den fokuserer på filnavne og metadata. For at søge efter tekst i filer kombineres det normalt med `grep`.

En typisk måde at gøre dette på er ved at -exec:

find /ruta -type f -exec grep -i "palabra" {} \; -print

Her, find Send hver fundne fil til grep, som søger efter den angivne tekst (ignorerer store og små bogstaver med -iMuligheden -print Det får stierne til de filer, der indeholder det pågældende mønster, til at blive vist.

Hvis du vil gøre det mere effektivt, kan du integrere xargs i Linux for at gruppere filer i batches i stedet for at køre grep én gang for hver fil:

Et andet meget almindeligt mønster involverer at finde PHP-filer, konfigurationsfiler eller andre specifikke filer og søge i dem efter bestemt tekst, såsom et token, en URL eller et funktionsnavn. For eksempel:

find proyectos -name "*.php" -type f -print0 | xargs -0 grep -l "ireg"

Reager på resultaterne: -exec, xargs og -delete

Indtil videre har vi fokuseret på, hvordan find filerMen den virkelige magi kommer, når du bruger find til at tage affære på baggrund af disse resultaterDe vigtigste værktøjer til dette er -exec, xargs og muligheden -delete.

Brug -exec til at køre kommandoer på hver fil

Den generiske form og eksempler på avanceret brug af -exec er:

find -exec comando {} +

Tasterne {} de opfører sig som position markør som erstattes af de fundne filer, og + Det angiver, at så mange filer som muligt skal sendes i hver udførelse af kommandoen (hvilket normalt er mere effektivt).

For eksempel, for at lave en lang liste (ls -l) over alle de fundne .txt-filer:

find . -type f -name "*.txt" -exec ls -l {} +

En anden almindeligt anvendt variant er at afslutte -exec med \; i stedet for +, hvad der gør Kommandoen udføres én gang pr. fil:

find . -type f -name "*.txt" -exec ls -l {} \;

Dette er mindre effektivt, men det har den fordel, at du kan bruge {} mere end én gang i den samme kommando. For eksempel, for at omdøbe alle .txt-filer ved at tilføje filtypen .old :

find . -type f -name "*.txt" -exec mv {} {}.old \;

Brug xargs med find

Mange brugere er mere komfortable med den klassiske pipe . Det er her, xargs kommer ind i billedet , som tager linjer fra standardinput og sender dem som argumenter til en kommando.

Et simpelt eksempel: en detaljeret liste over alle .txt-filer , grupperet sammen:

find . -type f -name "*.txt" | xargs ls -l

Når der er risiko for stier med mellemrum eller specialtegnDet anbefales kraftigt at bruge -print0 i at finde og -0 i xargs, som i det foregående eksempel med grep.

  Automatiser din systemvedligeholdelse med Wintoys

Søg og skift tilladelser på én gang

En tilbagevendende opgave er at justere tilladelser for mange filer på én gang , for eksempel at indstille alle .php-filer i et projekt til 755:

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

Det er også muligt først at filtrere efter aktuelle tilladelser og derefter ændre dem. For eksempel kan du søge efter filer med tilladelsestilstand 644 og ændre dem til 655:

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

I tilfælde af mapper kan du finde dem med 644 tilladelser og ændre dem til 755 for at gøre dem eksekverbare (tilgængelige):

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

Kopiér og flyt filer fundet med find

En anden typisk anvendelse er at kopiere eller flytte filer, der opfylder bestemte kriterier , til andre placeringer, hvad enten det er til sikkerhedskopiering, omorganisering eller arkivering.

For eksempel, kopiering af en bestemt fil til en destinationsmappe:

find . -iname "archivo22.txt" -exec cp {} ~/tmp/imagenes \;

Eller kopier alle de fundne .jpg-billeder til den samme billedmappe:

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

Du kan også iterere gennem en liste over destinationsmapper og kopiere en given fil til dem alle :

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

til flytte filer I stedet for at kopiere dem, erstatter du dem blot cp af mvFor eksempel at flytte en bestemt fil:

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

Eller flyt alle .php-filerne fra et websted til et andet :

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

Du kan endda flytte filer efter navnemønster , for eksempel alle filer, hvis navn starter med "uni", uanset filtypenavnet:

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

Ved at kombinere dette med aldersfiltre er det nemt at konfigurere arkiveringsopgaver. For eksempel kan man flytte alle PDF-filer, der er ældre end 20 dage, til en backupmappe:

find /ruta/ -type f -name "*.pdf" -mtime +20 -exec mv {} /backup1/ \;

Slet filer og mapper med find (forsigtigt)

Find bruges også i vid udstrækning til massesletning af filer og mapper , et meget kraftfuldt værktøj, men et der skal håndteres med stor forsigtighed, især hvis det køres som root.

Den mest direkte måde at slette kun filer, der matcher et mønster, er noget i retning af dette:

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

Sådan sletter du kun mapper , der starter med til:

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

Hvis du vil slette både filer og mapper, der matcher mønsteret:

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

Et meget almindeligt tilfælde er slet alle filer med en bestemt filtypenavn i et mappetræ, for eksempel alle .txt:

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

Hvis du foretrækker det Du vil blive bedt om bekræftelse for hver fil, kan du tilføje -i en rm:

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

En anden praktisk og noget sikrere måde er at bruge -delete , som direkte sletter det, der opfylder betingelserne for find, uden at gå gennem rm:

find . -type f -size 0 -delete

I tilfælde af tomme mapperdu kan bruge rmdir eller også -delete:

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

find . -type d -empty -delete

Som en generel regel, når du bruger `find` til at slette vigtige filer, er det bedst først at teste kommandoen uden sletningsfunktionen (kun ved at bruge filtrene) og gennemgå listen over berørte filer. Når du er sikker på, at du vil slette disse filer, skal du tilføje den destruktive handling.

Kombinér søgning med komprimering, sikkerhedskopiering og andre opgaver

Takket være fleksibiliteten hos -exec, find integreres problemfrit med komprimerings- og backupværktøjer som tar, gzip o rsyncFor eksempel er det almindeligt at finde gamle og store filer komprimer eller arkiver dem derefter.

En typisk arbejdsgang kunne være: find filer, der er ældre end 30 dage og større end 1 MB, komprimer dem, og slet dem derefter, hvis de ikke længere er nødvendige. Derfra kan du designe scripts, der kører med crontab for automatisk at udføre oprydning og sikkerhedskopiering.

Det er også meget nyttigt at kombinere find med tar for at oprette trinvise sikkerhedskopier af nyligt ændrede filer eller for at generere lister over filer, der derefter sendes til andre værktøjer til rapportering, synkronisering eller validering.

Kort sagt er find-kommandoen et nøgleværktøj i systemadministratorers og udvikleres daglige arbejde , da den ikke blot giver dem mulighed for at finde en hvilken som helst fil på et GNU/Linux-system, men også at handle på den med kirurgisk præcision, kombinere flere filtreringskriterier, integrere den med værktøjer som grep, tar, xargs eller rm og automatisere alle mulige rutineopgaver uden behov for grafiske grænseflader eller endeløse manuelle søgninger.

xargs-vejledning i Linux
Relateret artikel:
Komplet vejledning om xargs i Linux for at få mest muligt ud af det