Curl
使用 xargs 和來自 csv 的輸入並行執行 curl 命令
我有一個 csv 文件,其中包含多個列,包括序列號和圖像 URL。該文件有 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
但無法弄清楚如何在 xargs 命令中的 csv 文件的一行中使用多個欄位。我意識到 gnu parallel 和 wget 可能是更好的選擇,但它們在我的 unix 環境中不可用。
謝謝。
在我看來,您必須建構
curl
命令,然後將它們傳遞給 xargs:awk -F, '{print "curl '\''" $4 "'\'' > '\''" $1".jpg'\''"}' < input.csv | xargs -P2 -I {} sh -c '{}'
該命令看起來有點難看,因為我在 URL 和序列號/文件名周圍加上了單引號,以防其中有任何 shell 特殊字元(例如
&
)。
如果 Scott 可以使用建議的方法之一來獲得 GNU Parallel https://oletange.wordpress.com/2018/03/28/excuses-for-not-installing-gnu-parallel/那麼這可能有效:
parallel --colsep , 'curl {4} > {1}.jpg' :::: input.csv