Глобализация имени файла в bash - работа с файлами, начинающимися с заглавной буквы - PullRequest
9 голосов
/ 17 сентября 2010

Допустим, у меня есть папка со следующими jpeg-файлами:

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

Как удалить или перечислить файлы, начинающиеся с заглавной буквы?

Эту проблему можно решить с помощьюкомбинация find, grep и xargs.

Но это возможно при обычном глобализации файлов / сопоставлении с образцом в bash?

cmd ниже не работает из-затот факт, что (насколько я могу судить) LANG установлен на en_US и порядок сортировки.

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

Такого рода работы

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

Но я нехочу сделать это для всех персонажей AZ для общего решения!

Так возможно ли это?

ура // Фредрик

Ответы [ 3 ]

5 голосов
/ 17 сентября 2010

Вы должны установить свой языковой стандарт на C (или POSIX).

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

или

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

читайте здесь для получения дополнительной информации: http://www.opengroup.org/onlinepubs/007908799/xbd/locale.html

5 голосов
/ 17 сентября 2010

Используйте выражение в скобках с классом символов:

ls -l [[:upper:]]*

См. man 7 regex для получения списка классов символов и другой информации.

С этой страницы:

В выражении в скобках имя класса символов, заключенное в '[:' и ':]', обозначает список всех символов, принадлежащих этому классу. Стандартные имена классов символов:

alnum    digit    punct  
alpha    graph    space  
blank    lower    upper  
cntrl    print    xdigit  
2 голосов
/ 17 сентября 2010

Используйте grep:

ls | grep -e ^[A-Z]

Если хотите сделать больше, используйте цикл for:

for i in $(ls | grep -e ^[A-Z]); do echo $i ;done 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...