2010-09-17 3 views
9

Disons que j'ai un dossier avec les fichiers Jpeg suivants:bash nom de fichier globbing - fonctionner sur les fichiers commençant par le capital

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

Comment puis-je supprimer les fichiers ou la liste qui commence avec un capital? Ceci peut être résolu avec une combinaison de find, grep et xargs.

Mais est-ce possible avec une correspondance de fichier/globalisation normale dans bash? Cmd ci-dessous ne fonctionne pas en raison du fait que (pour autant que je sache) LANG est réglé sur en_US et l'ordre de classement.

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

Ce genre d'œuvres

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

Mais je ne veux pas faire cela pour tous les caractères A-Z pour une solution générale!

Est-ce possible?

acclamations // Fredrik

+1

Chose intéressante, sur ma boîte Linux avec LANG sur « en_US.UTF-8 », « ls [AZ] * » donne tous les minuscules aussi bien, mais Sur mon Macintosh avec LANG réglé sur "en_US.UTF-8", "ls [AZ] *" ne donne que des noms de cas supplémentaires. LC_COLLATE n'est défini sur aucune des deux cases, donc je ne sais pas quelle est la différence. –

Répondre

5

vous devez définir vos paramètres régionaux à la C (ou POSIX) locale.

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

ou

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

lire ici pour plus d'informations: http://www.opengroup.org/onlinepubs/007908799/xbd/locale.html

+0

Argh! J'ai essayé celui-là avant mon post mais 'LC_ALL = C ls [A-Z] *. Jpg' liste tous les fichiers pour moi! POSIX thingie [: supérieur:] fonctionne bien! Merci! ;-) –

2

utilisation grep:

ls | grep -e ^[A-Z] 

Si vous voulez faire plus utiliser une boucle for:

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

Utilisez une expression de support avec une classe de caractères:

ls -l [[:upper:]]* 

Voir man 7 regex pour une liste des classes de caractères et d'autres informations.

A partir de cette page:

Dans une expression de support, le nom d'une classe de caractères entre « [: » et « :] » représente la liste de tous les caractères appartenant à cette classe. Les noms de classes standards sont:

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