複数のフォルダに対して for ループを実行する

複数のフォルダに対して for ループを実行する

私は複数のフォルダーを操作しています。各フォルダーには異なる名前があり、それぞれに複数の CSV ファイルが含まれています。フォルダー内の各 CSV ファイルに対して、ファイルの名前でフォルダーを作成し、新しいフォルダー内にファイルの N 個のコピーを作成する bash スクリプトがあります。元の bash スクリプトでは、スクリプトが実行される特定のフォルダーを記述できます。

しかし、今ではフォルダが100個あり、このスクリプトを自動化しようとしていますが、適切に動作しません。

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

関連情報