快速下载多个文件wget

时间:2015-10-05 21:42:36

标签: windows bash cygwin wget

我想使用wget下载几个网页,为此我使用以下BASH:

wget -x --load-cookies cookies.txt http://www.example.com/1
wget -x --load-cookies cookies.txt http://www.example.com/2
wget -x --load-cookies cookies.txt http://www.example.com/3
wget -x --load-cookies cookies.txt http://www.example.com/4
wget -x --load-cookies cookies.txt http://www.example.com/5
wget -x --load-cookies cookies.txt http://www.example.com/6
wget -x --load-cookies cookies.txt http://www.example.com/7
wget -x --load-cookies cookies.txt http://www.example.com/8

使用Cygwin:

sh download.sh

但是,每次下载文件时它重新连接到服务器并且需要时间,是否有更有效的方法从同一服务器大量下载文件(example.com /...)?

3 个答案:

答案 0 :(得分:1)

您可以尝试mget。它基本上是一个多线程wget

答案 1 :(得分:0)

我同意打开新进程的一些先前答案,以便命令并行运行。话虽如此,每当我做这样的事情时,我都会使用一个非常方便的工具(也适用于Cygwin),该工具将是GNU Parallel

安装parallel后,在您的示例中,我将执行以下操作:

$ for i in {1..8}; do echo $i; done | parallel -j+0 wget -x --load-cookies cookies.txt http://www.example.com/{}
  • for循环只是将不同的参数逐行输入parallel。有多种方法可以做到这一点,但这只是一个例子。
  • -j+0告诉parallel将每个作业分散到尽可能多的内核中。 man parallel将解释更多选项,并且它是非常可调整的。您可以查看并根据您的规格进行调整。

基本上,如果你有4个核心并运行top命令,你会看到4个独立的wget进程同时运行。一旦退出,另一个就会开始,直到所有8个工作完成。

由于我们主要关注网络套接字而不一定是处理,其他解决方案可能效果更好,但这只是一种简单的方法来完成你正在尝试的东西,就像我说的,parallel是功能非常丰富,因此您可以调整该命令,使其更好/更快。

这绝对值得尝试,因为例如,我不确定如果将它分成两个并行作业会发生什么 - 这可能是4核系统的完美答案:

$ for i in {1..4}; do echo $i; done | parallel -j+0 wget -x --load-cookies cookies.txt http://www.example.com/{}
$ for i in {5..8}; do echo $i; done | parallel -j+0 wget -x --load-cookies cookies.txt http://www.example.com/{}

你仍然必须在子shell中运行这些命令,以便它们不会按顺序执行(使用(...)&等等,正如其他人所建议的那样。如果我错了,有人请纠正我,但它会可能看起来像这样:

$ (for i in {1..4}; do echo $i; done | parallel -j+0 wget -x --load-cookies cookies.txt http://www.example.com/{})&
$ (for i in {5..8}; do echo $i; done | parallel -j+0 wget -x --load-cookies cookies.txt http://www.example.com/{})&

来自top的伪输出可能看起来像这样:

wget
wget
wget
wget
parallel
wget
wget
wget
wget
parallel

所有这一切,我从未使用mget,这可能是工作的正确工具。关于Aria2的回复有点偏,但他们说这是一个能够进行多线程下载的命令行下载工具是正确的。

答案 2 :(得分:-1)

不使用wget。 Wget仍然是顺序的,意味着它启动一个文件,将其部分下载直到它完成并断开连接。这里无法下载同一连接上的所有文件。你可能会使用像Aria2c这样的东西来做这件事,但我不确定你能得到多少改善。