如何使用wget同时下载多个文件?

如何使用wget同时下载多个文件?

我正在使用 wget 从包含我需要下载的文件的 URL 的 csv 文件下载约 330k 科学文件。所以,我正在使用命令

wget -i all_the_urls.csv

我的文件 all_the_urls.csv 看起来像这样

http://dr16.sdss.org/sas/dr16/sdss/spectro/redux/v5_13_0/spectra/lite/11040/spec-11040-58456-0109.fits
http://dr16.sdss.org/sas/dr16/sdss/spectro/redux/v5_13_0/spectra/lite/11068/spec-11068-58488-0780.fits
http://dr16.sdss.org/sas/dr16/sdss/spectro/redux/v5_13_0/spectra/lite/11068/spec-11068-58488-0240.fits
...

这些文件很小,每个大约 250 kB。但它们的数量如此之大wget,如果只是一个接一个地下载它们,则需要几天的时间才能下载它们。是否可以使用 wget 命令来同时下载多个文件?注意 - 我的问题与许多其他关于从同一网站下载许多文件的问题并不重复。另外,请不要建议我wget2- 我在安装时遇到一些问题wget2,在这里我寻找其他解决方案。

这可能是相关的,我的互联网连接约为 550 MB/秒,当文件逐一下载时,其下载速度显示为 150 kB/秒,相比之下,这是微不足道的。因此,就带宽而言,一次下载许多文件是有意义的(至少我猜是这样)

您能否也告诉我如何执行以下潜在替代方案之一:

  • 在下载文件之前先将其压缩,希望单个大 zip 文件的下载速度会更快
  • 我正在下载的文件.fits包含 3 个表。实际上我只需要每个表中的第一个表。因此,如果我可以wget访问并仅下载第一个表(最好将所有第一个表附加到一个大文件/表中),那么这也可能节省时间

如有任何建议或想法请告知

答案1

您可以使用parallel。它在大多数 Linux 发行版中都可用。

-jN意味着将运行N个并行程序。您可以将其调整为类似-j8甚至更多。

cat url-list | parallel -j8 wget {}

或者替代地

cat url-list | parallel -j8 wget ' ' {}

cat正在读取带有要下载的 URL 的文件。我的文件看起来很喜欢:

https://XXX/all/Packages/a/abrt-2.10.9-20.el8.x86_64.rpm
https://XXX/all/Packages/a/abrt-addon-vmcore-2.10.9-20.el8.x86_64.rpm
...

然后输出通过管道传输到负责旋转多个 wget 的并行(-jN 决定多少个)。这{}是管道输入线。

相关内容