
Necesito copiar algunos archivos que son como este:
folder1/name1.csv
folder1/name2.csv
folder2/name1.csv
folder2/name2.csv
folder3/name1.csv
folder3/name2.csv
Todas las carpetas* son subdirectorios de un directorio. Lo que quiero hacer es copiar todo el archivo "nombre*" en un nuevo directorio new_dir pero tengo que cambiar su nombre. Buscando ayuda lo intenté
find . -name 'name*.csv' -exec cp --backup=t '{}' new_dir/ \;
Pero obtengo "cp: './new_dir/name1.csv' e './new_dir/name1.csv' son el mismo archivo".
¿Cómo puedo agregar un prefijo o sufijo al nombre para poder copiarlos? Agregar un número entero está bien, por lo que en los archivos new_dir quedarán como:
new_dir/name10.csv
new_dir/name21.csv
new_dir/name12.csv
new_dir/name23.csv
new_dir/name14.csv
new_dir/name25.csv
...
O, mejor aún, si puedo cambiar el nombre del archivo agregando el nombre de la carpeta desde donde se copian, como:
new_dir/name1folder1.csv
new_dir/name2folder1.csv
new_dir/name1folder2.csv
new_dir/name2folder2.csv
new_dir/name1folder3.csv
new_dir/name2folder3.csv
...
Gracias de antemano.
Respuesta1
Dado
$ tree folder*
folder1
├── name1.csv
├── name2.csv
└── name3.csv
folder2
├── name1.csv
├── name2.csv
└── name3.csv
folder3
├── name1.csv
├── name2.csv
└── name3.csv
0 directories, 9 files
luego usando un bucle de shell con expansión de parámetros para cortar y dividir los nombres
$ for f in folder*/name*.csv; do
b="${f##*/}";
echo cp "$f" new_dir/"${b%.csv}${f%/*}.csv"
done
cp folder1/name1.csv new_dir/name1folder1.csv
cp folder1/name2.csv new_dir/name2folder1.csv
cp folder1/name3.csv new_dir/name3folder1.csv
cp folder2/name1.csv new_dir/name1folder2.csv
cp folder2/name2.csv new_dir/name2folder2.csv
cp folder2/name3.csv new_dir/name3folder2.csv
cp folder3/name1.csv new_dir/name1folder3.csv
cp folder3/name2.csv new_dir/name2folder3.csv
cp folder3/name3.csv new_dir/name3folder3.csv