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

Fre*_*ihl 9 bash glob

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

adfjhu.jpg  Afgjo.jpg  
Bdfji.jpg   bkdfjhru.jpg
Cdfgj.jpg   cfgir.jpg
Ddfgjr.jpg  dfgjrr.jpg
Run Code Online (Sandbox Code Playgroud)

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

这可以用组合来解决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
Run Code Online (Sandbox Code Playgroud)

这种作品

$ ls +(A|B|C|D)*.jpg
Afgjo.jpg  Bdfji.jpg  Cdfgj.jpg  Ddfgjr.jpg
Run Code Online (Sandbox Code Playgroud)

但我不想为所有字符AZ做这个通用解决方案!

这可能吗?

欢呼// Fredrik

les*_*ana 5

您应该将您的语言环境设置为C(或POSIX)语言环境.

$ LC_ALL=C ls [A-Z]*.jpg
Run Code Online (Sandbox Code Playgroud)

要么

$ LC_ALL=C ls [[:upper:]]*.jpg
Run Code Online (Sandbox Code Playgroud)

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


Pau*_*ce. 5

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

ls -l [[:upper:]]*
Run Code Online (Sandbox Code Playgroud)

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

从该页面:

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

alnum    digit    punct  
alpha    graph    space  
blank    lower    upper  
cntrl    print    xdigit  
Run Code Online (Sandbox Code Playgroud)