我通常使用 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[@]}
所有参数都指向,curl
每links.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
根据作为其参数提供的分隔符来分割行(" "
在本例中)。