Du kan inte direkt lista filer som bara slutar med små bokstäver med ett enda kommando och grundläggande filloktor. Här är varför och hur man arbetar runt det:
Varför det är svårt:
* grundläggande globering: Standard UNIX -skal använder grundläggande globeringsmönster (*, ?, [], etc.). Dessa kan matcha alla karaktärsfall, men kan inte skilja mellan versaler och små bokstäver för specifik filtrering.
Lösningen:Använd `find` och` grep`
Du kan kombinera "hitta" och "grep" för att uppnå detta. Så här::
`` `bash
hitta. -Typ F -Print0 | grep -ez '^./[^/]*[a -z] \.? [^/]*$' | xargs -0 ls -l
`` `
Förklaring:
1. `hitta. -typ f -print0`:
- `hitta. ':börjar söka i den aktuella katalogen ('. ')
- `-typ f`:ser bara efter vanliga filer
- `-print0`:utskrifter hittade filer separerade av nolltecken (säkrare för filnamn med mellanslag)
2. `grep -ez '^./[^/]*[A -z] \.? [^/]*$'`:
- `grep`:filtrerar utgången från` find`
- `-e`:Aktiverar utökade regelbundna uttryck för mer flexibilitet
-`-z`:behandlar inmatning som noll-terminerade strängar
- Det regelbundna uttrycket:
- `^./`:Matchar början av linjen, följt av "./" (för att matcha relativa vägar)
- `[^/]*`:matchar alla tecken utom "/" (säkerställer att vi fortfarande är inom filnamnet)
- `[A-Z]`:Matchar en enda små bokstäver
- `\.? [^/]*`:Matchar en valfri prick (`. ') Följt av alla tecken utom"/"
- `$`:matchar slutet på linjen
3. `xargs -0 ls -l`:
-`xargs -0`:tar den noll -terminerade fillistan från` grep 'och bygger kommandoargument
- `ls -l`:listar filerna (du kan ändra detta till alla kommando du vill köra på de filtrerade filerna)
Viktiga anteckningar:
* dolda filer: Detta kommer att hitta dolda filer (börjar med '.') Som uppfyller kriterierna.
* Fallkänslighet: Ditt Shells utvidgning av filnamn kan vara skiftlägeskänslig eller okänslig.
Låt mig veta om du vill förfina sökningen ytterligare!