Execute for loop para várias pastas

Execute for loop para várias pastas

Tenho trabalhado com várias pastas, cada pasta tem um nome distinto e cada uma delas tem vários arquivos CSV dentro, tenho um script bash que para cada arquivo csv dentro da pasta, cria uma pasta com o nome do arquivo e faz N cópias dos arquivos dentro da nova pasta, no script bash original, posso escrever a pasta específica onde ela é executada.

Mas agora tenho centenas de pastas e tento automatizar esse script, mas não funciona corretamente

#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

Estou procurando ajuda para tornar isso possível, desde já agradeço. Cumprimentos

Responder1

Por que não usar find? Não acho que meu script será mais rápido, mas funciona. -execdirprecisa do gnu find, mas com alguns ajustes, o POSIX find with -exectambém pode 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 '{}' \;

informação relacionada