Aplicar comando entre diferentes nombres de directorio

Aplicar comando entre diferentes nombres de directorio

Tengo los directorios A, B, C guardados en la ruta 1 y los directorios A_1, A_2, A_3, B_1, B_2, B_3, C_1, C_2, C_3 están guardados en la ruta 2.

Tengo la misma copia de "file.txt" guardada en los directorios A, B, C en la ruta1

Quiero hacer una copia de "file.txt" en cada directorio de la ruta 2. Probé el bucle for de la siguiente manera:

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

El código anterior no pudo leer los directorios en la ruta2.

¿Que estoy haciendo mal?

Respuesta1

CPPuede tomar múltiples fuentes, pero no múltiples destinos. Si desea obtener los directorios de destino expandiendo "path2/${i}_"*/, entonces necesita un segundo forbucle:

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

Alternativamente, puede generar usted mismo los nombres del directorio 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

No olvide que debe poner entre comillas dobles las expansiones de variables de shell de forma predeterminada, a menos que tenga una razón específica para no citarlas.

información relacionada