
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 for
bucle:
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.