2010-09-17 8 views
9

Lets sagen, ich habe einen Ordner mit den folgenden JPEG-Dateien:bash Globbing - arbeitet auf Dateien mit Startkapital

adfjhu.jpg Afgjo.jpg 
Bdfji.jpg bkdfjhru.jpg 
Cdfgj.jpg cfgir.jpg 
Ddfgjr.jpg dfgjrr.jpg 

Wie kann ich entfernen oder die Dateien auflisten, die mit einem Kapital beginnt?

Dies kann mit einer Kombination von find, grep und xargs gelöst werden.

Aber es ist möglich mit normalen Datei-Globbing/Mustererkennung in Bash?

cmd unten funktioniert nicht aufgrund der Tatsache, dass (soweit ich das beurteilen kann) LANG auf und die Sortierreihenfolge festgelegt ist.

$ ls [A-Z]*.jpg 
Afgjo.jpg Bdfji.jpg bkdfjhru.jpg Cdfgj.jpg cfgir.jpg Ddfgjr.jpg dfgjrr.jpg 

Diese Art von Arbeiten

$ ls +(A|B|C|D)*.jpg 
Afgjo.jpg Bdfji.jpg Cdfgj.jpg Ddfgjr.jpg 

Aber ich das nicht will A-Z für eine allgemeine Lösung für alle Charaktere tun!

So ist das möglich?

prost // Fredrik

+1

Interessanterweise auf meinem Linux-Box mit LANG auf "en_US.UTF-8", "ls [AZ] *" gibt alle Kleinbuchstaben diejenigen als gut, aber Auf meinem Macintosh, auf dem LANG auf "en_US.UTF-8" eingestellt ist, gibt "ls [AZ] *" nur die Groß-/Kleinschreibung. Auf keiner der Boxen ist LC_COLLATE eingestellt, also weiß ich nicht was der Unterschied ist. –

Antwort

5

Sie Ihre Locale auf dem C setzen soll (oder POSIX) Gebietsschema.

$ LC_ALL=C ls [A-Z]*.jpg 

oder

$ LC_ALL=C ls [[:upper:]]*.jpg 

hier für weitere Informationen lesen: http://www.opengroup.org/onlinepubs/007908799/xbd/locale.html

+0

Argh! Ich habe das vor meinem Post versucht, aber 'LC_ALL = C ls [A-Z] * .jpg' listet alle Dateien für mich auf! POSIX dingie [: upper:] funktioniert aber! Vielen Dank! ;-) –

2

Verwendung grep:

ls | grep -e ^[A-Z] 

Wenn Sie mehr wollen verwenden, um eine for Schleife:

for i in $(ls | grep -e ^[A-Z]); do echo $i ;done 
5

Verwenden Sie einen Ausdruck in eckigen Klammern mit einer Zeichenklasse:

ls -l [[:upper:]]* 

man 7 regex Siehe für eine Liste von Zeichenklassen und andere Informationen.

Von dieser Seite:

Innerhalb eines Klammerausdruckes, der Name einer Zeichenklasse in geschlossenen ‚[:‘ und ‚:]‘ steht für die Liste aller Zeichen zu dieser Klasse gehören. Standard-Zeichenklassennamen sind:

alnum digit punct 
alpha graph space 
blank lower upper 
cntrl print xdigit