Bash

在 for 循環中迭代文件組

  • December 16, 2020

我有一組這樣的文件:

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

引用自:https://unix.stackexchange.com/questions/624609