異なるディレクトリ名間のコマンドの適用

異なるディレクトリ名間のコマンドの適用

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}_"*/2番目のループが必要です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

特別な理由がない限り、基本的にシェル変数拡張を二重引用符で囲む必要があることを忘れないでください。

関連情報