Bash
在 for 循環中迭代文件組
我有一組這樣的文件:
A1.xlsx A2.xlsx B1.xlsx C1.xlsx C2.xlsx
我只知道前綴(A、B、C),但名稱的其餘部分事先是未知的,文件的數量也是如此。我需要呼叫一些命令,將它們傳遞給這些文件組,如下所示:
mycommand A*.xlsx mv A*.xlsx tmp/ mycommand B*.xlsx mv B*.xlsx tmp/ mycommand C*.xlsx mv C*.xlsx tmp/
我已經為循環嘗試了不同的語法,
for fileGroup in A* B* C*
但我只設法將文件名一個接一個地傳遞給mycommand
,或者只對所有文件呼叫mycommand
一次。bash 中是否有語法來執行此操作?
假設您知道並且可以對前綴進行硬編碼:
for p in A B C D; do mycommand "$p"*.xlsx mv "$p"*.xlsx tmp/ ... done
對所有這些都使用 glob 表達式。
A
對於以orB
或開頭的文件C
。<mycommand> [ABC]*.xlsx mv -t tmp/ -- [ABC]*.xlsx
這是關於 glob 的好讀物。
如果您需要執行不接受許多文件參數的命令,則必須為每個參數呼叫單獨的程序,但您仍然可以使用相同的 glob 選擇它們:
for f in [ABC]*.xlsx; do <some_command> "$f" done