Wildcards
任意深度的萬用字元
我想
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