2011-10-18 104 views
5

我試圖使用模式匹配來查找擴展名爲.jpg或jpeg的目錄中的所有文件。Bash模式匹配

ls *.[jJ][pP][eE][gG] < - 這顯然只會找到.jpeg文件擴展名。問題是,我如何使[eE可選?

回答

6

比較難。

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

非常感謝,那就是我一直在尋找的:) – Elliot

2

除了標準的(簡單)glob模式時,bash≥4.0已擴展通配。
這是off by default。要打開它,請使用:shopt -s extglob

使用extglob您可以訪問擴展正則表達式模式以及標準模式。此外,在您的特定情況下,您可以通過啓用case insensitive glob來進一步調整您的glob的行爲,默認情況下此功能也處於關閉狀態。要打開它,請使用:shopt -s nocaseglob

啓用extglob不會改變標準球體的工作方式。你可以混合使用這兩種形式。唯一的問題是你必須知道特殊的擴展正則表達式語法。例如,在下面的例子中,擴展正則表達式的唯一部分是?(e)。其餘部分是標準全局擴展,啓用了不區分大小寫。

擴展的正則表達式,不區分大小寫的水珠您的具體情況是:

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

你可以找到更多信息和示例:Bash Extended Globbing

+0

實際上,Bash在bash-2.02-alpha1(即_long_前 - 像15年)中得到了延長的globbing。當'。/ configure'運行時(即編譯之前),可以選擇是否默認打開或關閉。實際上,它所介紹的版本顯示在您爲其默認設置提供的鏈接中。 –