Linux
pom.xml, /pom.xml, //pom.xml, 然後是 ///pom.xml… 目標文件的快捷方式我們知道它的名稱,不管它是什麼目錄深度?
要對我的所有文件應用一些更改
pom.xml
,我正在執行以下命令:git checkout --theirs **/**/**/**/pom.xml git checkout --theirs **/**/**/pom.xml git checkout --theirs **/**/pom.xml git checkout --theirs **/pom.xml git checkout --theirs pom.xml
但我找不到針對所有
pom.xml
文件的替換,在任何級別的目錄深度。我如何在一個命令中完成我所做的事情?
根據您的要求,這裡有兩個可能的答案。您不能使用 shell 萬用字元來匹配尚不存在的文件或目錄,因此您不能使用 shell 萬用字元來指示
git
要簽出哪些項目,除非它們已經存在於您的文件系統中。幸運的是git
,它本身確實支持這種情況的萬用字元。
- 特別是對於
git
,您需要將 傳遞**
給git
自身,而不需要 shell 嘗試擴展它。在這種情況下,使用引號將字元串作為文字傳遞給git
:git checkout '**/pom.xml'
git
在shell之外bash
還支持雙星萬用字元擴展。文件 (man bash
) 寫道,
globstar
如果設置,**
路徑名擴展上下文中使用的模式將匹配所有文件以及零個或多個目錄和子目錄。如果模式後跟 a/
,則只有目錄和子目錄匹配。這是一個
bash
預設情況下通常不啟用的選項,因此您需要啟用它:shopt -s globstar
之後的例子,
ls **/pom.xml