シリアル番号と画像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とシリアル番号/ファイル名の周りに一重引用符を入れたため、コマンドは少し見苦しく見えます。