Du kan ikke direkte liste filer, der kun slutter med små bogstaver med en enkelt kommando og grundlæggende filsklodde. Her er hvorfor og hvordan man arbejder omkring det:
Hvorfor er det vanskeligt:
* Grundlæggende globbing: Standard UNIX -skaller bruger basale globbingmønstre (*,?, [] Osv.). Disse kan matche ethvert karaktertilfælde, men kan ikke skelne mellem store og små bogstaver til specifik filtrering.
Løsningen:ved hjælp af `find 'og` grep`
Du kan kombinere 'Find' og 'Grep' for at opnå dette. Her er hvordan:
`` `bash
Find. -type f -print0 | grep -ez '^./[^/]*[a -z] \.? [^/]*$' | xargs -0 ls -l
`` `
Forklaring:
1. `Find. -type f -print0`:
- 'Find.':begynder at søge i det aktuelle bibliotek ('.')
- `-type f`:ser kun efter almindelige filer
- `-Print0`:Prints fundet filer adskilt af nulpersoner (sikrere for filnavne med mellemrum)
2. `grep -ez '^./[^/]*[A -z] \.? [^/]*$'`:
- `grep`:filtre output fra` find'
- `-e`:Aktiverer udvidede regelmæssige udtryk for mere fleksibilitet
-`-z`:Behandler input som nul-terminerede strenge
- det almindelige udtryk:
- `^./`:Matcher begyndelsen af linjen, efterfulgt af "./" (for at matche relative stier)
- `[^/]*`:matcher eventuelle tegn undtagen "/" (sikrer, at vi stadig er inden for filnavnet)
- `[A-Z]`:matcher et enkelt små bogstav
- `\.? [^/]*`:Matcher en valgfri prik (`.`) Efterfulgt af nogen tegn undtagen "/"
- `$`:matcher slutningen af linjen
3. `xargs -0 ls -l`:
-`Xargs -0`:tager den nul -terminerede filliste fra` grep 'og bygger kommandoargumenter
- `ls -l`:viser filerne (du kan ændre dette til enhver kommando, du vil udføre på de filtrerede filer)
Vigtige noter:
* skjulte filer: Dette finder skjulte filer (startende med '.'), Der opfylder kriterierne.
* sagsfølsomhed: Din shells filnavnudvidelse kan være det store og følsomme eller ufølsomme.
Fortæl mig, hvis du vil forfine søgningen yderligere!