Применить команду между разными именами каталогов

Применить команду между разными именами каталогов

У меня есть каталоги A, B, C, сохраненные в path1, а каталоги A_1, A_2, A_3, B_1, B_2, B_3, C_1, C_2, C_3 сохранены в path2.

У меня есть одна и та же копия "file.txt", сохраненная в каталогах A, B, C в path1

Я хочу сделать копию "file.txt" в каждом каталоге в path2. Я попробовал цикл 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

срможет принимать несколько источников, но не несколько назначений. Если вы хотите получить целевые каталоги, расширяя "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

Не забывайте, что по умолчанию следует заключать расширения переменных оболочки в двойные кавычки, если только у вас нет особой причины не делать этого.

Связанный контент