在bash腳本中,我希望找到其路徑不包含具有「雙擴展名」的子目錄的文件。例如,如果我期待在/my/home
爲path/to/my/file
子目錄和下面存在,腳本將查找只有第一個:是否可以使用Bash擴展匹配模式來匹配不包含特定字符的路徑
/my/home/subdirectory.1/path/to/my/file
/my/home/subdirectory.1.2/path/to/my/file
這是一個簡化的例子:1
和2
可以是任意的字符串;關鍵點是它們就像文件擴展名(即以句點分隔)。
我可以使用ls
$ ls /my/home/subdirectory.*/path/to/my/file
但這同時返回 - 我想,以取代.*
與.[^.]*
,但這是一個正則表達式和通配不使用正則表達式。我試過擴展的文件名替換,但我不能讓它工作(我很高興承認我不熟悉擴展通配符):
$ shopt -s extglob
$ ls /my/home/subdirectory.!(.*)/path/to/my/file
我知道我可以使用find
要做到這一點,像這樣:
$ find /my/home/subdirectory* -regex "/my/home/subdirectory.[^.]*/path/to/my/file"
但我期望glob更快。然而,在閱讀了這篇文章之後,我認爲這已經超出了Bash的globbing,extended或其他的能力。但我認爲這是一個值得討論的好問題。
請注意,可以使用克拉('^')代替感嘆號。 – 2014-03-10 20:14:55