Bash模式匹配

我正在尝试使用模式匹配来查找扩展名为.jpg或jpeg的目录中的所有文件。

ls *.[jJ][pP][eE][gG] < – 这显然只能find.jpeg文件扩展名。 问题是,如何使[eE可选?

比赛更难。

 ls *.[jJ][pP]{[eE],}[gG] 

除了标准(简单)全局模式之外,bash≥4.0还扩展了 globbing。
它默认关闭 。 要打开它,请使用: shopt -s extglob

使用extglob您可以访问扩展的正则表达式模式以及标准模式。 此外,在特定的情况下,您可以通过启用不区分大小写的glob (默认情况下也会关闭)来调整glob的行为。 要打开它,请使用: shopt -s nocaseglob

启用extglob不会改变标准glob的工作方式。 你可以混合两种形式。 唯一的问题是你必须知道特殊的扩展正则表达式语法。 例如,在下面的例子中,扩展正则表达式的唯一部分是?(e) 。 其余的是标准glob扩展,启用了不区分大小写。

扩展正则表达式,对你的情况不区分大小写的glob是:

 shopt -s extglob nocaseglob ls -l *.jp?(e)g 

你可以找到更多的信息和例子: Bash Extended Globbing 。