Curl

使用 xargs 和來自 csv 的輸入並行執行 curl 命令

  • November 2, 2018

我有一個 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

引用自:https://unix.stackexchange.com/questions/479233