我正在尝试使用模式匹配来查找扩展名为.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 。