對多個目錄中的同名檔案運行命令

對多個目錄中的同名檔案運行命令

我想執行一個命令,該命令採用多個參數,這些參數駐留在同一檔案名稱下的不同目錄中,例如

mycommand dir-001/myfile dir-002/myfile dir-003/myfile … dir-048/myfile

我正在尋找一些 shell 命令,可以將所有檔案放入編號從 1 到 48 或任何數字作為命令參數的子目錄中。

答案1

您可以使用標準檔案名稱通配符,例如所有 3 位數字(按順序):

$ mycommand dir-[0-9][0-9][0-9]/myfile

對於基本的通配符,您需要一種用於一位數字的模式,一種用於兩位數字的模式,等等。

$ mycommand dir-[0-9]/myfile dir-[0-9][0-9]/myfile

Zsh(但不包括其他 shell)也支援mycommand dir-<->/myfile, 或 例如mycommand dir-<3-42>/myfile編號為 3 到 42 的目錄。

或者,如果您更喜歡大括號擴展(並且您的 shell 支援它):

$ mycommand dir-{1..3}/myfile

如果您的目錄名稱包含前導零,請將它們放在大括號中,例如dir-{001..048}/myfile.

透過大括號擴展,您也可以這樣做(在 ksh93 和 zsh 中,但不在 bash 中)

$ mycommand dir-{1..$n}/myfile

其中$n擴展為某個整數。

答案2

find . -type f -name myfile | xargs command

相關內容