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. -execdir
precisa do gnu find, mas com alguns ajustes, o POSIX find with -exec
també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 '{}' \;