使用 xargs 和来自 csv 的输入并行运行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

现在我想使用并行运行curl命令xargs -P。 (我不想只是在后台使用,&因为我想限制进程数量。)我看到使用-I和 的示例-R,但无法弄清楚如何在 xargs 命令中使用 csv 文件行中的多个字段。

我意识到 gnu parallel 和 wget 可能是更好的选择,但它们在我的 unix 环境中不可用。

谢谢。

答案1

IF Scott 可以使用建议的方法之一来获得 GNU Parallelhttps://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 和序列号/文件名两边加上了单引号,以防其中有任何 shell 特殊字符(例如&)。

相关内容