9

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

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

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

这可以通过 和 的组合来find解决。grepxargs

但是在 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 这样做以获得一般解决方案!

那么这可能吗?

欢呼//弗雷德里克

4

3 回答 3

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

于 2010-09-17T12:32:59.540 回答
5

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

ls -l [[:upper:]]*

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

从该页面:

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

alnum    digit    punct  
alpha    graph    space  
blank    lower    upper  
cntrl    print    xdigit  
于 2010-09-17T12:44:42.117 回答
2

使用grep

ls | grep -e ^[A-Z]

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

for i in $(ls | grep -e ^[A-Z]); do echo $i ;done 
于 2010-09-17T12:07:27.857 回答