xargsとcsvの入力を使用してcurlコマンドを並列に実行する

xargsとcsvの入力を使用してcurlコマンドを並列に実行する

シリアル番号と画像URLを含む複数の列を含むCSVファイルがあります。ファイルの行が450を超えています。

1,text1,text2,http://image_a.jpg
2,text1,text2,http://image_b.jpg
3,text1,text2,http://image_c.jpg
.
.
.

目標はURLから画像をダウンロードすることで、ファイル名はシーケンスです。次のスクリプトを使用して正常に実行しました。

while IFS=, read col1 col2 col3 col4
do
   curl ${col4} > ${col1}.jpg
done < myfile.csv

それでは、パラレルを使ってカールコマンドを実行したいと思いますxargs -P。 (プロセスの数を制限したいので、バックグラウンドでのみ使用したくありません. &)コマンド。-I-R

私はgnuパラレルとwgetがより良いオプションかもしれないことを知っていますが、私のUnix環境では利用できません。

ありがとうございます。

答え1

IF Scott提案された方法の1つを使用してGNU Parallelを取得できますhttps://oletange.wordpress.com/2018/03/28/excuses-for-not-installing-gnu-parallel/これにより、次のように動作できます。

parallel --colsep , 'curl {4} > {1}.jpg' :::: input.csv

答え2

curl私の例では、コマンドを作成してxargsに渡す必要があるようです。

awk -F, '{print "curl '\''" $4 "'\'' > '\''" $1".jpg'\''"}' < input.csv | xargs -P2 -I {} sh -c '{}'

&シェル特殊文字(たとえば)がある場合、URLとシリアル番号/ファイル名の周りに一重引用符を入れたため、コマンドは少し見苦しく見えます。

関連情報