Aplicar comando entre diferentes nomes de diretório

Aplicar comando entre diferentes nomes de diretório

Tenho os diretórios A, B, C salvos no caminho1 e os diretórios A_1, A_2, A_3, B_1, B_2, B_3, C_1, C_2, C_3 estão salvos no caminho2

Tenho a mesma cópia de "file.txt" salva nos diretórios A, B, C no caminho1

Quero fazer uma cópia de "file.txt" em todos os diretórios do caminho2. Eu tentei o loop da seguinte maneira:

#!/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

O código anterior não conseguiu ler os diretórios no path2.

O que estou fazendo errado?

Responder1

CPpode levar múltiplas fontes, mas não vários destinos. Se você deseja obter os diretórios de destino expandindo "path2/${i}_"*/, precisará de um segundo forloop:

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

Alternativamente, você mesmo pode gerar os nomes dos diretórios de destino:

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

Não se esqueça de que você deve colocar aspas duplas nas expansões de variáveis ​​​​do shell por padrão, a menos que tenha um motivo específico para não citar.

informação relacionada