Linux fd-kommando: 10 terminal filsøgningsmetoder

- Den simpelste søgning: Find alle filnavne, der indeholder en fast streng
- En glob-søgning: At matche nøjagtige filnavne
- Regex-søgning: Find alle filer, der begynder med en dato
- Finding files with a specific extension
- Finde Mapper I Stedet For Filer
- Finde Skjulte Filer Ved -H
- Finde Filer I Git Repositories
- Boolean Logik Ved Brug Af --and For Flere Mønstre
- Finde nye filer
- Liste alle filer rekursivt
Fd-programmet tilbyder en effektiv måde at søge i filsystemet med avancerede søgemønstre, der spænder fra enkle filnavne til komplekse regulære udtryk og filtyper.
fd-programmet er et alternativ til find, som kan søge i filsystemet ved hjælp af forskellige mønstre. Det har mange muligheder, der understøtter et bredt udvalg af anvendelsestilfælde, hvilket gør det nemt at finde enhver type fil, uanset dine krav.
De følgende eksempler viser fd's brede funktionalitet. De inkluderer grundlæggende søgninger, regulære udtryk, filtrering efter filtype og mere.
Dette er den mest almindelige og grundlæggende søgning, du regelmæssigt vil udføre: filer, hvis navne indeholder en fast streng. Hvad du søger efter afhænger ikke kun af dine egne navngivningskonventioner, men også af dem, der almindeligvis er i brug. For eksempel:
fd readme
Denne kommando vil finde alle filer med navne, der indeholder "readme", ved hjælp af en case-insensitive match. Så for eksempel, det kunne inkludere:
- readme.md
- README
- a-file-with-readme-in-it.txt
- subdir/ReAdMe
Bemærk, at dette er meget bredere end en standard søgning med find, som er case-sensitive og kun matcher nøjagtige strenge. En simpel find readme vil ikke finde nogen af ovenstående filer; her er en ækvivalent, der vil finde dem:
find -iname '*readme*'
Så fd er meget lettere at bruge til basis tilfælde af at finde en fil med en specifik tekst i dens navn.
Så fd udfører ikke glob-søgninger som standard, men du kan overskrive denne adfærd, hvis du har brug for en anden type søgning. For eksempel, hvis du bare vil have filer, der begynder med "readme", så prøv denne søgning:
fd --glob 'readme*'
Dette er stadig en case-insensitive søgning, men du kan efterligne finds standardadfærd ved at bruge -s flaget for case-sensitivity:
fd -gs 'readme'
-g flaget er en forkortelse for --glob, mens -s er en forkortelse for --case-sensitive. Dette vil finde alle filer med det nøjagtige navn "readme" i den nuværende mappe og eventuelle undermapper:
Det er godt at få en vane med at citere dit søgemønster. Dette sikrer, at eventuelle specialtegn—som *—ikke bliver fortolket af shellen og behandlet som noget andet end en del af dit søgemønster.
Bemærk, at resultaterne inkluderer filer i undermapper; glob-mønsteret gælder kun for filnavnet og ikke hele stien. Brug -p (--full-path), hvis du vil søge efter tekst inden for hver fils fulde sti.
Du kan bruge globbing til at matche nøjagtige filnavne, blot ved at undgå brugen af enhver glob-tegn. Så fd's ækvivalent til find -name README er:
fd -gs README
Regex-søgning: Find alle filer, der begynder med en dato
Udover glob-baserede søgninger kan fd finde filer, hvis navne matcher et regulært udtryk. Faktisk er det standardadfærden:
fd '^..[da]+..$'
Denne vil finde alle filer, hvis navne indeholder to tegn, efterfulgt af et vilkårligt antal "d" eller "a" bogstaver, derefter efterfulgt af to tegn mere. For eksempel vil det lokalisere følgende:
På dette tidspunkt er det værd at reflektere over fd's adfærd omkring case-sensitivity. Som standard er fd-søgninger hverken case-sensitive eller case-insensitive; det er mere kompliceret end det. fd vil forsøge at være klog omkring din søgning, baseret på tilstedeværelsen af eventuelle store tegn.
For eksempel, fd '^..[DA]+..$' vil udføre en case-sensitive søgning, fordi mønsteret indeholder mindst ét stort tegn. Så denne søgning ville returnere en fil med navnet "README", men ikke en med navnet "readme." Omvendt, fd '^..[da]+..$' indeholder ingen store tegn, så den vil udføre en case-insensitive søgning, der vil finde filer med navne som "README," "readme," og "ReAdMe."
Igen vil den brug, du finder til mere komplekse søgninger baseret på regulære udtryk, afhænge af dine egne navngivningskonventioner. Men der er anvendelser til mange almindelige tilfælde også.
Her er et eksempel, der vil finde alle filer med en Markdown-udvidelse, som kan være “.markdown,” “.mdown,” eller “.md:”
fd '\.(md|mdown|markdown)$'
Finding files with a specific extension
Søgning efter filer baseret på deres udvidelse er så almindeligt et tilfælde, at fd har en særlig tilstand for det. -e.
Optionen søger efter en filtype, som følgende:
fd -e md
Dette svarer til fd '\.md$' og vil finde alle filer, hvis navn ender på ".md."
Du kan søge efter flere filtyper ved at gentage -e optionen, så du kan finde alle markdown-filer uden at bruge et regulært udtryk:
fd -e md -e mdown -e markdown
Finde Mapper I Stedet For Filer
Som standard vil fd finde alle filtyper, herunder mapper, symboliske links, eksekverbare filer og almindelige filer. Du kan ændre denne adfærd med -t optionen, som kræver et af de følgende bogstaver umiddelbart efter:
| f | Regulær fil |
| d | Mappe |
| l | Symbolsk link |
| x | Eksekverbar |
| e | Tom fil |
Bemærk, at nogle af disse kan overlapper: for eksempel kan en fil (-f) også være en tom fil (-e). Bemærk også, at -e vil finde tomme mapper, der matcher. Hvis du vil søge efter flere typer, skal du bruge -t optionen mere end én gang. For eksempel, for at finde mapper og symlinks:
fd -td -tl foo
Finde Skjulte Filer Ved -H
Skjulte filer er en anden type fil, som fd understøtter. Som standard ignorerer det dem:
Dog kan du med -H optionen finde skjulte filer, som .DS_Store filer på macOS:
fd -H .DS_Store
Dette er en fremragende mulighed, hvis du vil fjerne sådanne unødvendige systemfiler, især hvis du ønsker at automatisere processen.
Du kan også bruge dette til at finde .gitignore filer, som indeholder data om filer, som git ikke bør betragte som en del af et repository:
fd -H .gitignore
Finde Filer I Git Repositories
Når vi taler om .gitignore filer, vil fd automatisk bruge dem til at filtrere ignorerede filer. .gitignore filer bruges typisk til genererede filer, som kompilerede eksekverbare filer eller konverterede dokumenter, som ikke bør gemmes permanent i repositoryet.
Dette betyder, at hvis du arbejder i et tjekket repository, kan du måske ikke finde de filer, du forventer. Du kan se, hvordan dette fungerer med en kort demonstration. Inden for et git repository skal du køre git check-ignore for at liste de filer, der vil blive ignoreret:
Dette kommando piper output fra git til grep for at vise kun filnavne, der indeholder den tekst. Nu kan du bekræfte, at fd ikke vil finde denne fil som standard:
Selvom denne søgning finder mange resultater, skal du bemærke, at ingen af de ignorerede filer fra den forrige kommando findes af fd.
Som standard vil fd kun tage .gitignore i betragtning, hvis et git repository er til stede. Med andre ord, du skal have et .git bibliotek med en gyldig struktur, ikke bare en .gitignore fil.
Denne adfærd vil generelt give mening, hvis du er programmør. Når du arbejder på et repository, er du generelt interesseret i permanente filer, snarere end dem der genereres midlertidigt. Du kan dog tilsidesætte denne adfærd ved at bruge --no-ignore-vcs optionen.
Du ønsker måske ikke denne adfærd som standard, men det er let at rette. Den enkle løsning er at oprette et alias med muligheden for at deaktivere det, dvs. alias fd="fd --no-ignore-vcs".
Fd tillader også, at du ignorerer mønstre, der er angivet i .ignore og .fdignore filer. Disse er til generelt brug og fd-specifikt brug, henholdsvis.
Boolean Logik Ved Brug Af --and For Flere Mønstre
Hvis dine mønstre bliver mere komplicerede, kan du bruge boolean logik til at forenkle dem. --and optionen lader dig søge efter filer, der matcher mere end ét mønster. For eksempel, lad os sige, at du bruger følgende kommando til at finde filer, der begynder med et stort bogstav og indeholder mindst et tal:
fd '^[A-Z].*[0-9]+.*'
Det regulære udtryk er lidt akavet på grund af behovet for at tage højde for "andre tegn" ved brug af .* mønsteret. I stedet kan du dele de to tests op i individuelle mønstre ved hjælp af --and:
fd '^[A-Z]' --and '[0-9]+'
Dette skulle give de nøjagtigt samme resultater, men det er lidt mere læsevenligt og nemmere at formulere.
Eller måske har du en række filer som README.2025-09-12, 2025-09-10.README.md... At finde filer med README og en dato i hvilken som helst rækkefølge kan være akavet, men --and muligheden gør det meget lettere:
fd 'README' --and '[0-9]{4}-[0-9]{2}-[0-9]{2}'
Finde nye filer
fd programmet kan gå ud over at finde filer baseret kun på deres navn. Det kan også teste filer baseret på deres ejer, størrelse eller hvornår de sidst blev ændret. Sidstnævnte er meget nyttig og lader dig finde "alle filer ændret i sidste uge," for eksempel:
fd
Selvfølgelig kan du kombinere datofiltre med andre tests, så her er en kommando til at finde alle symbolske links ejet af brugeren bobby, som blev ændret i dag:
fd
--newer muligheden gør det samme som --changed-within, --change-newer-than og --changed-after.
Liste alle filer rekursivt
Endelig en praktisk, men uventet anvendelse af fd, som det arver fra find: at liste alle filer. Hvis du kører det uden argumenter, vil fd liste alle ikke-ignorerede filer i den aktuelle mappe og eventuelle undermapper:
Hvis du kører find ækvivalenten af denne kommando (find .), vil du måske bemærke, at den giver meget forskellige resultater fra fd. Dette fremhæver fd’s standardadfærd med at ignorere skjulte filer og andre, som dem der er angivet i .gitignore. Brug -u muligheden for at tilsidesætte denne adfærd, og du bør få det samme antal resultater for begge:
Du kan have svært ved at få fd til at bevare sin farveoutput, når det sendes til en anden kommando. Jeg fandt succes med --color muligheden og paginatoren most, dvs. fd --color always . | most.
At liste filer på denne måde kan være en hurtig og nem måde at få en fornemmelse af et projekt, du har klonet, eller et pakket, du har udpakket. fd’s farvefremhævelse bør også hjælpe dig med at få et overblik over, hvor forskelligartet katalogets indhold er.

Skriv et svar