tags:

views:

54

answers:

3

Hi,

Lets say I have a folder with the following jpeg-files:

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

How do I remove or list the files that starts with a capital?

This can be solved with a combination of find, grep and xargs.

But it is possible with normal file-globbing/pattern matching in bash?

cmd below doesn't work due to the fact that (as far as I can tell) LANG is set to en_US and the collation order.

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

This sort of works

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

But I don't wanna do this for all characters A-Z for a general solution!

So is this possible?

cheers //Fredrik

A: 

Use grep: ls | grep -e ^[A-Z]
if you want make more use a 'for loop':
for i in $(ls | grep -e ^[A-Z]); do rm $i ;done

Gadolin
+1  A: 

you should set your locale to the C (or POSIX) locale.

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

or

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

read here for more information: http://www.opengroup.org/onlinepubs/007908799/xbd/locale.html

lesmana
Argh! I tried that one prior to my post but `LC_ALL=C ls [A-Z]*.jpg` lists all files for me! POSIX thingie [:upper:] works though! Thanks! ;-)
Fredrik
A: 

Use a bracket expression with a character class:

ls -l [[:upper:]]*

See man 7 regex for a list of character classes and other information.

From that page:

Within a bracket expression, the name of a character class enclosed in '[:' and ':]' stands for the list of all characters belonging to that class. Standard character class names are:

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