여러 폴더에 대해 for 루프 실행

여러 폴더에 대해 for 루프 실행

나는 여러 폴더로 작업해 왔으며 각 폴더에는 고유한 이름이 있고 각 폴더에는 내부에 여러 개의 CSV 파일이 있습니다. 폴더 내의 각 csv 파일에 대해 파일 이름으로 폴더를 만들고 N 복사본을 만드는 bash 스크립트가 있습니다. 원래 bash 스크립트에서 새 폴더 내의 파일 중 실행되는 폴더를 구체적으로 작성할 수 있습니다.

하지만 지금은 수백 개의 폴더가 있고 이 스크립트를 자동화하려고 하지만 제대로 작동하지 않습니다.

#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

이를 가능하게 하기 위해 도움을 찾고 있습니다. 미리 감사드립니다. 문안 인사

답변1

왜 사용하지 않습니까 find? 내 스크립트가 더 빠를 것이라고 생각하지 않지만 어느 정도 작동합니다. -execdirgnu find가 필요하지만 약간만 수정하면 POSIX find -exec도 작동할 수 있습니다.

#!/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 '{}' \;

관련 정보