Befehl zwischen verschiedenen Verzeichnisnamen anwenden

Befehl zwischen verschiedenen Verzeichnisnamen anwenden

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 forSchleife:

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.

verwandte Informationen