同时使用多个wget -r下载一个网站?

10

有没有带选项的任何命令/wget?

可以同时递归地下载网站并进行多线程下载吗?

4个回答

12

我找到了一个不错的解决方案。

原始帖子请参见http://www.linuxquestions.org/questions/linux-networking-3/wget-multi-threaded-downloading-457375/

wget -r -np -N [url] &
wget -r -np -N [url] &
wget -r -np -N [url] &
wget -r -np -N [url] &

你可以复制此代码多次,以便下载更多进程。这种方法虽不如真正的多线程应用程序优雅,但仍能完成工作,只需稍微增加一点开销即可。关键在于“-N”开关,它表示仅在文件更新时才传输文件。这将(大部分情况下)避免每个进程下载已被另一个进程下载的相同文件,而是跳过该文件并下载其他进程尚未下载的文件。它使用时间戳来实现这一点,因此会稍微增加一些开销。

对我来说非常有效,可节省大量时间。不要使用太多进程,否则可能会饱和网站连接并惹恼所有者。最好限制在4个左右。然而,进程数量仅受两端CPU和网络带宽的限制。


这个对你有用吗?我在两台服务器上使用它,到目前为止没有出现任何问题。 - Julian
我使用 wget -m 以简化操作,并同时运行几个。 - William Entriken

4

2
只有当您预先知道所有可下载的URL时,才是好的。这并不适用于您想要镜像网站的情况。 - Ray

3

使用axel进行多线程下载

apt-get install axel

axel http://example.com/file.zip

或者使用 aget http://www.enderunix.org/aget/,但这些不是递归解决方案(虽然对于其他寻找此类解决方案的人来说很好)。 - Orwellophile

2

你可以运行多个 wget 实例,不是吗?

例如:

wget -r http://somesite.example.org/ &
wget -r http://othersite.example.net/ &

等等,这种语法可以在任何类Unix环境下使用(例如Linux或MacOS);不确定如何在Windows中执行此操作。

Wget本身不支持多线程操作-至少,无论是manpage还是官网都没有提到。无论如何,由于wget支持HTTP keepalive,瓶颈通常是连接的带宽而不是同时下载的数量。


根据wget手册(http://linux.die.net/man/1/wget)和其官网上的文档(http://www.gnu.org/software/wget/manual/wget.html),没有这样的选项(或类似的选项)- wget是单线程的。抱歉。 - Piskvor left the building

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接