在不同目錄名之間套用指令

在不同目錄名之間套用指令

我在path1中儲存了目錄A、B、C,在path2中儲存了目錄A_1、A_2、A_3、B_1、B_2、B_3、C_1、C_2、C_3

我在路徑 1 的目錄 A、B、C 中保存了相同的「file.txt」副本

我想在path2 中的每個目錄中製作“file.txt”的副本。我嘗試了 for 循環,如下所示:

#!/bin/bash
path1=path to directories A, B, C
path2=path to directories A_1, A_2, A_3, B_1, B_2, B_3, C_1, C_2, C_3
for i in $(cat dirname.txt); do #dirname.txt is a file located in path1 contain the directories names in path1 (i.e A, B, C)
cp $path1/${i}/file.txt $path2/${i}_*/
done

前面的程式碼無法讀取path2中的目錄。

我做錯了什麼?

答案1

CP可以採用多個來源,但不能採用多個目的地。如果你想透過展開來取得目標目錄 "path2/${i}_"*/,那麼你需要第二個for循環:

for i in A B C; do
   for j in "path2/${i}_"*/; do
      cp "$path1/$i/file.txt" "$j"
   done 
done

或者,您可以自己產生目標目錄名稱:

for i in A B C; do
   for j in "path2/${i}_"{1..3}/; do
      cp "$path1/$i/file.txt" "$j"
   done 
done

不要忘記,預設情況下您應該用雙引號引用 shell 變數擴展,除非您有特定原因不加引號。

相關內容