【发布时间】:2011-12-09 23:34:01
【问题描述】:
我正在尝试使用模式匹配来查找目录中具有 .jpg 或 jpeg 扩展名的所有文件。
ls *.[jJ][pP][eE][gG] [eE 成为可选?
【问题讨论】:
我正在尝试使用模式匹配来查找目录中具有 .jpg 或 jpeg 扩展名的所有文件。
ls *.[jJ][pP][eE][gG] [eE 成为可选?
【问题讨论】:
更加努力地匹配。
ls *.[jJ][pP]{[eE],}[gG]
【讨论】:
除了标准(简单)通配符模式外,bash ≥4.0 还具有扩展通配符。
它是off by default。要打开它,请使用:shopt -s extglob
使用extglob,您可以访问扩展的正则表达式模式以及标准模式。此外,在您的特定情况下,您可以通过启用case insensitive glob(默认情况下也是关闭的)来进一步定制 glob 的行为。要打开它,请使用:shopt -s nocaseglob
启用 extglob 不会改变标准 glob 的工作方式。您可以混合使用这两种形式。唯一的问题是您必须了解特殊的扩展正则表达式语法。例如,在下面的示例中,它的唯一部分是扩展的正则表达式,是?(e)。其余的是标准全局扩展,启用不区分大小写。
适合您情况的扩展正则表达式、不区分大小写的全局是:
shopt -s extglob nocaseglob
ls -l *.jp?(e)g
您可以在以下位置找到更多信息和示例:Bash Extended Globbing。
【讨论】:
./configure 时(即在编译之前)可以选择默认情况下是打开还是关闭。事实上,引入它的版本显示在您为其默认设置提供的链接中。