Wildcards

任意深度的萬用字元

  • September 24, 2014

我想grep在目錄下使用路徑是任意深度/path/to/dir並具有文件名的位置foo。我認為任意深度的萬用字元是**,我試過了

grep some_pattern /path/to/dir/**/foo

但它似乎只匹配**部分代表單個目錄深度的文件,例如

/path/to/dir/bar/foo

如何匹配目錄下任意深度/path/to/dir且具有文件名的路徑foo

使用 zsh。在 zshexpn(1) 手冊頁的“遞歸萬用字元”部分:

‘(foo/)#’ 形式的路徑名組件匹配由零個或多個與模式 foo 匹配的目錄組成的路徑。

作為簡寫,’**/’ 等價於 ‘(*/)#’;請注意,這因此匹配目前目錄和子目錄中的文件。

$$ … $$這種形式不遵循符號連結;替代形式 ‘***/’ 可以,但在其他方面是相同的。

這也意味著**預設情況下不包括隱藏目錄(其名稱以點開頭)。如果要匹配它們,請設置GLOB_DOTS選項或使用 D glob 限定符:

grep some_pattern /path/to/dir/**/foo(D)

使用 bash,您需要顯式設置globstar選項才能**正常工作:

shopt -s globstar

引用自:https://unix.stackexchange.com/questions/157070