Du kan ikke direkte liste opp filer som bare slutter med små bokstaver med en enkelt kommando og grunnleggende fillobbing. Her er grunnen og hvordan du jobber rundt det:
hvorfor det er vanskelig:
* Basic Globbing: Standard UNIX -skjell bruker grunnleggende globbingmønstre (*,?, [], Etc.). Disse kan samsvare med ethvert karaktersak, men kan ikke skille mellom store og små bokstaver for spesifikk filtrering.
Løsningen:Bruke `finn` og` grep`
Du kan kombinere `Finn` og` grep` for å oppnå dette. Slik er det:
`` Bash
finn. -Type F -print0 | grep -ez '^./[^/]*[a -z] \.? [^/]*$' | xargs -0 ls -l
`` `
Forklaring:
1. `Finn. -Type F -print0`:
- `Finn .`:begynner å søke i den gjeldende katalogen (`. ')
- `-Type F`:Ser bare etter vanlige filer
- `-print0`:Utskrifter funnet filer atskilt med null tegn (tryggere for filnavn med mellomrom)
2. `grep -ez '^./[^/]*[A -z] \.? [^/]*$'`:
- `grep`:filtrerer utgangen fra` finn`
- `-e`:Aktiverer utvidede regelmessige uttrykk for mer fleksibilitet
-`-z`:behandler inngang som null-terminerte strenger
- Det vanlige uttrykket:
- `^./`:Matcher begynnelsen av linjen, etterfulgt av "./" (for å matche relative stier)
- `[^/]*`:samsvarer med noen tegn unntatt "/" (sikre at vi fremdeles er innenfor filnavnet)
- `[A-Z]`:Matcher et enkelt små bokstaver
- `\.? [^/]*`:Matcher en valgfri prikk (`.`) etterfulgt av noen tegn unntatt»/"
- `$`:samsvarer med slutten av linjen
3. `xargs -0 ls -l`:
-`Xargs -0`:Tar den null -terminerte fillisten fra` grep` og bygger kommandoargumenter
- `ls -l`:Lister filene (du kan endre dette til hvilken som helst kommando du vil utføre på de filtrerte filene)
Viktige merknader:
* skjulte filer: Dette vil finne skjulte filer (starter med '.') Som oppfyller kriteriene.
* Sakfølsomhet: Skallets utvidelse av filnavn kan være saksfølsom eller ufølsom.
Gi meg beskjed hvis du vil avgrense søket videre!