并行 curl(或 wget)下载

Parallel curl (or wget) downloads

我有一个包含 2192 个 url 的文件,每行一个。我正在尝试像这样并行下载它们:

cat urls.txt | tr -d '\r' | xargs -P 8 -n 1 curl -s -LJO -n -c ~/.urs_cookies -b ~/.urs_cookies

但是,在计算所有文件下载后 ls -1 | wc -l,我只有 1400 个文件。我知道这些 URL 的格式都正确(它们是由我从中下载数据的网站自动生成的)。

我可以重新运行上面的命令并每次都获得更多文件,但这还不够。此外,一次下载一个文件是一种选择,但服务器需要大约 30 秒来 响应 请求,但每个文件只需要大约 2 秒来下载。我至少有 5 个文件,每个文件有 2192 个 URL。我非常想做一个并行下载。

谁能帮我弄清楚为什么并行下载会提前停止?

如果您可以使用(稍微)不同的工具,我可以推荐使用 GNU Wget2 吗?它是 GNU Wget 的精神继承者。它已经在 Debian 和 OpenSUSE 存储库以及 AUR

上可用

Wget2 提供开箱即用的多线程下载,并带有一个漂亮的进度条以查看当前状态。它还支持 HTTP/2 和许多其他几乎不可能添加到 Wget 中的新功能。

在这里查看我的回答: 了解更多详情。

使用 Wget2,您只需 运行 $wget2 -i urls.txt 它就会开始并行下载您的文件。

编辑:正如另一个答案中提到的,免责声明:我同时维护 Wget 和 Wget2。所以我明显偏向于这个工具