我正在尝试使用模式匹配来查找目录中扩展名为.jpg或jpeg的所有文件。
ls *.[jJ][pP][eE][gG]
< - 这显然只会找到.jpeg文件扩展名。问题是,如何使[eE
可选?
答案 0 :(得分:7)
比较努力。
ls *.[jJ][pP]{[eE],}[gG]
答案 1 :(得分:2)
除了标准(简单)的glob模式外,bash≥4.0还有扩展 globbing。
它是off by default。要打开它,请使用:shopt -s extglob
使用extglob
,您可以访问扩展的正则表达式模式以及标准模式。此外,在您的特定情况下,您可以通过启用case insensitive glob来进一步定制您的glob的行为,默认情况下也会关闭Bash Extended Globbing。要打开它,请使用:shopt -s nocaseglob
启用extglob
不会改变标准globs的工作方式。你可以混合两种形式。唯一的问题是您必须了解特殊的扩展正则表达式语法。例如,在下面的例子中,它是扩展正则表达式的唯一部分是?(e)
。其余的是标准的glob扩展,启用了大小写不敏感。
针对您的情况的扩展正则表达式,不区分大小写的glob是:
shopt -s extglob nocaseglob
ls -l *.jp?(e)g
您可以在{{3}}找到更多信息和示例。