複数のフォルダで for ループを実行する

複数のフォルダで for ループを実行する

私はそれぞれ異なる名前を持つ複数のフォルダと各フォルダ内の複数のCSVファイルで作業してきました。フォルダ内の各csvファイルにファイル名を使用するbashスクリプトがあります。フォルダを作成し、内部ファイルのNコピーを作成します。新しいフォルダ、元の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 '{}' \;

おすすめ記事