
Ich habe die Verzeichnisse A, B, C in Pfad1 gespeichert und die Verzeichnisse A_1, A_2, A_3, B_1, B_2, B_3, C_1, C_2, C_3 sind in Pfad2 gespeichert
Ich habe die gleiche Kopie von "file.txt" in den Verzeichnissen A, B, C in Pfad1 gespeichert
Ich möchte in jedem Verzeichnis in Pfad2 eine Kopie von „file.txt“ erstellen. Ich habe die For-Schleife wie folgt ausprobiert:
#!/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
Der vorherige Code konnte die Verzeichnisse im Pfad2 nicht lesen.
Was mache ich falsch?
Antwort1
cpkann mehrere Quellen annehmen, aber nicht mehrere Ziele. Wenn Sie die Zielverzeichnisse durch Erweitern erhalten möchten
"path2/${i}_"*/
, benötigen Sie eine zweite for
Schleife:
for i in A B C; do
for j in "path2/${i}_"*/; do
cp "$path1/$i/file.txt" "$j"
done
done
Alternativ können Sie die Zielverzeichnisnamen selbst generieren:
for i in A B C; do
for j in "path2/${i}_"{1..3}/; do
cp "$path1/$i/file.txt" "$j"
done
done
Vergessen Sie nicht, dass Sie Shell-Variablenerweiterungen standardmäßig in doppelte Anführungszeichen setzen sollten, es sei denn, Sie haben einen bestimmten Grund, dies nicht zu tun.