He estado trabajando con varias carpetas, cada carpeta tiene un nombre distinto y cada una de ellas tiene varios archivos CSV dentro, tengo un script bash que para cada archivo csv dentro de la carpeta crea una carpeta con el nombre del archivo y hace N copias. De los archivos dentro de la nueva carpeta, en el script bash original, puedo escribir la carpeta específica donde se ejecuta.
Pero ahora tengo cientos de carpetas e intento automatizar este script, pero no funciona correctamente.
#cd grupo_2_pareja_D-H
#cd grupo_2_single_D-H
#cd grupo_2_tercia_CDH
for d in ./*; do
echo "$d"
for x in ./* .csv; do
mkdir "${x%.*}"
for ((i=1;i<=10;i++)); do # Create a loop, looping N times
cp "$x" "${x%.*}/"${x%.*}"_$i.csv" # use i in the copy command
#rm -f "$x" # Remove the file after the N copies
done
done
done
Busco ayuda para hacer esto posible, gracias de antemano. Saludos
Respuesta1
¿Por qué no utilizar find
? No creo que mi guión sea más rápido, pero funciona. -execdir
Necesito gnu find pero con algunos ajustes, POSIX find with -exec
también puede funcionar.
#!/bin/sh
find "$@" -type f -name '*.csv' -execdir sh -c 'name="${1%.csv}"; mkdir -- "$name"; for i in $(seq 10); do cp -- "$1" "$name/${name}_$i.csv" & done' shell '{}' \;