在 Linux shell 上并行使用 curl 输入文件并输出文件名

在 Linux shell 上并行使用 curl 输入文件并输出文件名

我通常使用 curl 和 url 并行下载文件,文件格式如下:

cat links.txt | parallel --will-cite curl --connect-timeout 5 --max-time 10 --retry-max-time 40 --retry 5 --retry-delay 0 -s -f -O -C -

其中 links.txt 每行有一个 url。

现在我需要为每个文件分配一个自定义文件名,但我不知道如何将第二个输入添加到curl槽中parallel。除其他事项外,我尝试将其添加-o filename到每一行links.txt,但没有成功。

问候,

答案1

根据man parallel,您可以使用一些占位符来帮助您。例如,您可以将代码重写为:

parallel curl "${CURL_ARGS[@]}" -o '{#}'.curl_output '{}' :::: links.txt

其中,${CURL_ARGS[@]}所有参数都指向,curllinks.txt行一个 URL。此命令会获取 URL,links.txt并将结果存储在以运行 curl 的作业编号命名的文件中(例如10.curl_output)。您必须使用 URL 来排列作业编号。

另一种方法是curl使用进行调用-o '{}'._curl_output。在这种情况下,您必须处理 URL 中的特殊字符(/例如)。

除此之外,您还可以拆分列,每links.txt行包含一个 URL 和一个输出文件。这样您就可以

parallel --colsep " " curl "${CURL_ARGS[@]}" -o '{1}' '{2}' :::: links.txt

--colsep根据作为其参数提供的分隔符来分割行(" "在本例中)。

相关内容