bash filename globbing - 对以capital开头的文件进行操作

时间:2010-09-17 12:05:12

标签: bash glob

假设我有一个包含以下jpeg文件的文件夹:

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

如何删除或列出以大写字母开头的文件?

这可以通过findgrepxargs的组合来解决。

但是在bash中可以使用普通的文件循环/模式匹配吗?

由于(据我所知)LANG被设置为en_US这一事实,

下面的cmd不起作用 和整理顺序。

$ 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

但我不想为所有角色A-Z做一般解决方案!

这可能吗?

欢呼声 //弗雷德里克

3 个答案:

答案 0 :(得分:5)

您应该将您的区域设置设置为C(或POSIX)区域设置。

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

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

请在此处阅读以获取更多信息:http://www.opengroup.org/onlinepubs/007908799/xbd/locale.html

答案 1 :(得分:5)

使用带有字符类的括号表达式:

ls -l [[:upper:]]*

有关字符类和其他信息的列表,请参阅man 7 regex

从该页面开始:

  

在括号表达式中,'[:'和':]'中包含的字符类的名称代表属于该类的所有字符的列表。标准字符类名称为:

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

答案 2 :(得分:2)

使用grep

ls | grep -e ^[A-Z]

如果你想更多地使用for循环:

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