Linux fd-kommando: 10 terminalfil søkemetoder

fd-programmet gjør filsøking enkelt med støtte for diverse mønstre og filtre, fra vanlige søk til regulære uttrykk, og håndterer skjulte filer og Git-repositories effektivt.

fd-programmet er et alternativ til find, som kan søke i filsystemet med ulike mønstre. Det har mange valg for å støtte et bredt spekter av bruksområder, noe som gjør det enkelt å finne alle typer filer, uansett hva dine krav måtte være.

Følgende eksempler viser fd sin brede funksjonalitet. De inkluderer grunnleggende søk, regulære uttrykk, filtrering etter filtype, og mer.

Den enkleste søken: Finne alle filnavn som inneholder en fast streng

Dette er den vanligste og mest grunnleggende søkingen du regelmessig vil utføre: filer hvis navn inneholder en fast streng. Hva du søker etter vil avhenge ikke bare av dine egne navnekonvensjoner, men også av de som er vanlig i bruk. For eksempel:

fd readme

Denne kommandoen vil finne alle filer med navn som inneholder “readme”, med et søk som ikke tar hensyn til store og små bokstaver. Så, for eksempel, kan den inkludere:

  • readme.md
  • README
  • a-file-with-readme-in-it.txt
  • subdir/ReAdMe

Legg merke til at dette er mye bredere enn et standard søk med find, som er følsomt for små og store bokstaver og matcher bare nøyaktige strenger. En enkel find readme vil ikke finne noen av de nevnte filene; her er en ekvivalent som vil finne dem:

find -iname '*readme*'

Så fd er mye enklere å bruke for base-saken om å finne en fil med spesifikk tekst i navnet sitt.

En glob-søk: For å matche nøyaktige filnavn

Så fd utfører ikke glob-søk som standard, men du kan overstyre denne oppførselen hvis du trenger en annen type søk. For eksempel, hvis du bare vil ha filer som begynner med “readme,” prøv dette søket:

fd --glob 'readme*'

Dette er fortsatt et søk som ikke tar hensyn til store og små bokstaver, men du kan etterligne find sin standardoppførsel ved å bruke -s flagget for å være følsom for små og store bokstaver:

fd -gs 'readme'

Flagget -g er en forkortelse for --glob, mens -s er en forkortelse for --case-sensitive. Dette vil finne alle filer med det nøyaktige navnet “readme” i den nåværende katalogen og eventuelle undermapper:

Det er lurt å venne seg til å sette søkemønsteret i anførselstegn. Dette sikrer at spesialtegn—som *—ikke blir tolket av shell og behandlet som noe annet enn en del av søkemønsteret ditt.

Legg merke til at resultatene inkluderer filer i undermapper; glob-mønsteret gjelder bare filnavnet snarere enn den fullstendige stien. Bruk -p (--full-path) hvis du vil søke etter tekst innenfor hver fils fulle sti.

Du kan bruke globbing for å matche nøyaktige filnavn, bare ved å unngå bruken av noen glob-tegn. Så fd sin ekvivalent av find -name README er:

fd -gs README

Regex-søk: Finne alle filer som begynner med en dato

Utover glob-baserte søk, kan fd finne filer hvis navn matcher et regulært uttrykk. Faktisk er det standardoppførselen:

fd '^..[da]+..$'

Dette vil finne alle filer hvis navn inneholder to tegn, etterfulgt av et vilkårlig antall “d” eller “a” bokstaver, deretter etterfulgt av to tegn til. For eksempel, det vil lokalisere følgende:

På dette punktet er det verdt å reflektere over fd sin oppførsel angående små og store bokstaver. Som standard er ikke fd-søk følsomme for små og store bokstaver, og heller ikke ufølsomme; det er mer komplisert enn som så. fd vil prøve å være smart om søket ditt, basert på tilstedeværelsen av store bokstaver.

For eksempel, fd '^..[DA]+..$' vil utføre et søk som tar hensyn til store bokstaver fordi mønsteret inneholder minst ett stort tegn. Så dette søket ville returnere en fil med navnet “README”, men ikke en med navnet “readme.” Omvendt, fd '^..[da]+..$' inneholder ingen store bokstaver, så det vil utføre et søk som ikke tar hensyn til store bokstaver, som vil finne filer med navnene “README,” “readme,” og “ReAdMe.”

Igen, bruken du finner for mer komplekse søk basert på regulære uttrykk vil avhenge av dine egne navnekonvensjoner. Men det finnes også bruksområder for mange vanlige tilfeller.

Her er et eksempel som vil finne alle filer med en Markdown-utvidelse, som kan være “.markdown,” “.mdown,” eller “.md:”

fd '\.(md|mdown|markdown)$'

Finne filer med en spesifikk utvidelse

Å søke etter filer basert på deres utvidelse er så vanlig at fd har en spesiell modus for det. Det -e

alternativet vil søke etter en filtype, slik:

fd -e md

Dette er ekvivalent med fd '\.md$' og vil finne alle filer med navn som slutter med “.md.”

Du kan søke etter flere filtyper ved å gjentake -e alternativet, så du kan finne alle markdown-filer uten å bruke et regulært uttrykk:

fd -e md -e mdown -e markdown

Finne Kataloger Istedet For Filer

Som standard vil fd finne alle typer filer, inkludert kataloger, symboliske lenker, kjørbare filer og vanlige filer. Du kan endre denne oppførselen med -t alternativet, som krever en av følgende bokstaver umiddelbart etter seg:

fVanlig fil
dKatalog
lSymbolsk lenke
xKjørbar
eTom fil

Merk at noen av disse kan overlappe: for eksempel, en fil (-f) kan også være en tom fil (-e). Også merk at -e vil finne eventuelle tomme kataloger som matcher. Hvis du ønsker å søke etter flere typer, bruk -t alternativet flere ganger. For eksempel, for å finne kataloger og symlinker:

fd -td -tl foo

Finne Skjulte Filer Ved Bruk Av -H

Skjulte filer er en annen type fil som fd støtter. Som standard ignorerer den dem:

Imidlertid, ved å bruke -H alternativet, kan du finne skjulte filer, som .DS_Store-filer på macOS:

fd -H .DS_Store

Dette er et utmerket alternativ hvis du ønsker å fjerne slike unødvendige systemfiler, spesielt hvis du ønsker å automatisere prosessen.

Du kan også bruke dette til å finne .gitignore-filer, som inneholder data om filer som git ikke bør vurdere som en del av et repository:

fd -H .gitignore

Finne Filer I Git-repositories

Snakker om .gitignore-filer, vil fd bruke dem til å filtrere ut ignorerte filer automatisk. .gitignore-filer brukes vanligvis for genererte filer, som kompilerte kjørbare filer eller konverterte dokumenter som ikke bør lagres permanent i repositoryet.

Dette betyr at hvis du arbeider i et sjekket ut repository, kan det hende at du ikke finner filene du forventer. Du kan se hvordan dette fungerer med en kort demonstrasjon. Innenfor et git-repository, kjør git check-ignore for å liste filer som vil bli ignorert:

Denne kommandoen sender utdataene fra git til grep for å vise bare filnavnene som inneholder den teksten. Nå kan du bekrefte at fd ikke vil finne denne filen som standard:

Selv om dette søket finner mange resultater, merk at ingen av de ignorerte filene fra den forrige kommandoen blir funnet av fd.

Som standard vil fd bare ta hensyn til .gitignore hvis et git-repository er til stede. Med andre ord, du trenger et .git-katalog med gyldig struktur, ikke bare en .gitignore-fil.

Denne oppførselen vil generelt gi mening hvis du er en programmerer. Når du arbeider med et repository, er du vanligvis interessert i permanente filer, snarere enn de som genereres midlertidig. Imidlertid kan du overstyre denne oppførselen ved å bruke --no-ignore-vcs alternativet.

Du kanskje ikke ønsker denne oppførselen som standard, men det er lett å rette opp. Den enkle løsningen er å lage et alias med alternativet for å deaktivere det, dvs. alias fd="fd --no-ignore-vcs".

fd lar deg også ignorere mønstre som er oppført i .ignore og .fdignore-filer. Disse er for generell bruk og fd-spesifikk bruk, henholdsvis.

Boolean Logikk Ved Bruk Av --and For Flere Mønstre

Hvis mønstrene dine blir mer kompliserte, kan du bruke boolesk logikk for å forenkle dem. --and alternativet lar deg søke etter filer som matcher mer enn ett mønster. For eksempel, la oss si at du bruker følgende kommando for å finne filer som begynner med en stor bokstav og inneholder minst ett tall:

fd '^[A-Z].*[0-9]+.*'

Det regulære uttrykket er litt klønete på grunn av behovet for å ta høyde for “andre tegn” ved hjelp av .* mønsteret. I stedet kan du dele de to testene inn i individuelle mønstre ved å bruke --and:

fd '^[A-Z]' --and '[0-9]+'

Dette bør gi de samme resultatene, men det er litt mer lesbart og lettere å formulere.

Eller kanskje du har et sett med filer som README.2025-09-12, 2025-09-10.README.md ... Å finne filer med README og en dato i hvilken som helst rekkefølge kan være vanskelig, men --and alternativet gjør det mye enklere:

fd 'README' --and '[0-9]{4}-[0-9]{2}-[0-9]{2}'

Finne Nye Filer

fd-programmet kan gå utover å finne filer basert på bare navnet deres. Det kan også teste filer basert på eieren, størrelsen eller når de sist ble endret. Den siste er veldig nyttig og lar deg finne “alle filer endret forrige uke,” for eksempel:

fd 

Selvfølgelig kan du kombinere dato-filtre med andre tester, så her er en kommando for å finne alle symbolske lenker eid av brukeren bobby, som ble endret i dag:

fd 

--newer alternativet gjør det samme som --changed-within, --change-newer-than, og --changed-after.

Listing Alle Filer Rekursivt

Til slutt, en praktisk men uventet bruk av fd, som det arver fra find: listing av alle filer. Hvis du kjører det uten argumenter, vil fd liste opp alle ikke-ignorert filer i den gjeldende katalogen og eventuelle kataloger under den:

Hvis du kjører find-ekvivalenten av denne kommandoen (find .) kan du merke deg at den gir veldig forskjellige resultater fra fd. Dette fremhever fd sin standardatferd med å ignorere skjulte filer og andre, som de som er oppført i .gitignore. Bruk -u alternativet for å overstyre denne atferden, og du bør få det samme antallet resultater for begge:

Du kan ha problemer med å få fd til å bevare fargeutgangen når det pipet til en annen kommando. Jeg fant suksess med --color alternativet og mest pager, altså fd --color always . | most.

Å liste filer på denne måten kan være en rask og enkel måte å få en følelse av et prosjekt du har klonet eller en pakke du har pakket ut. Fargedetaljeringen til fd bør også hjelpe deg med å få en oversikt over hvor mangfoldig innholdet i katalogen er.

Hvis du vil lese flere artikler som Linux fd-kommando: 10 terminalfil søkemetoder, kan du besøke kategorien Linux.

Index
  1. Den enkleste søken: Finne alle filnavn som inneholder en fast streng
  2. En glob-søk: For å matche nøyaktige filnavn
  3. Regex-søk: Finne alle filer som begynner med en dato
  4. Finne filer med en spesifikk utvidelse
  5. Finne Kataloger Istedet For Filer
  6. Finne Skjulte Filer Ved Bruk Av -H
  7. Finne Filer I Git-repositories
  8. Boolean Logikk Ved Bruk Av --and For Flere Mønstre
  9. Finne Nye Filer
  10. Listing Alle Filer Rekursivt

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

Go up