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