Ejecutar for loop para múltiples carpetas

Ejecutar for loop para múltiples carpetas

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. -execdirNecesito gnu find pero con algunos ajustes, POSIX find with -exectambié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 '{}' \;

información relacionada