假设我有一个包含以下jpeg文件的文件夹:
adfjhu.jpg Afgjo.jpg
Bdfji.jpg bkdfjhru.jpg
Cdfgj.jpg cfgir.jpg
Ddfgjr.jpg dfgjrr.jpg
如何删除或列出以大写字母开头的文件?
这可以通过find
,grep
和xargs
的组合来解决。
但是在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做一般解决方案!
这可能吗?
欢呼声 //弗雷德里克
答案 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