私は複数のフォルダーを操作しています。各フォルダーには異なる名前があり、それぞれに複数の 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
? 私のスクリプトが速くなるとは思いませんが、何とか動作します。-execdir
gnu 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 '{}' \;