我正在使用wget下载网站内容,但是wget一步一步下载文件。
如何使用4个同时连接进行wget下载?
我正在使用wget下载网站内容,但是wget一步一步下载文件。
如何使用4个同时连接进行wget下载?
Answers:
使用aria2:
aria2c -x 16 [url]
# |
# |
# |
# ----> the number of connections
我喜欢它 !!
-s
指定拆分数量,并-k
指定每个拆分段的最小大小-否则您可能永远无法达到-x
最大连接数。
Wget不支持多个套接字连接,以加快文件下载速度。
我认为我们可以做的比garian答案还要好。
正确的方法是使用aria2
。
aria2c -x 16 -s 16 [url]
# | |
# | |
# | |
# ---------> the number of connections here
-x, --max-connection-per-server=NUM The maximum number of connections to one server for each download. Possible Values: 1-16 Default: 1
和-s, --split=N Download a file using N connections. If more than N URIs are given, first N URIs are used and remaining URLs are used for backup. If less than N URIs are given, those URLs are used more than once so that N connections total are made simultaneously. The number of connections to the same host is restricted by the --max-connection-per-server option. See also the --min-split-size option. Possible Values: 1-* Default: 5
About the number of connections Since 1.10.0 release, aria2 uses 1 connection per host by default and has 20MiB segment size restriction. So whatever value you specify using -s option, it uses 1 connection per host. To make it behave like 1.9.x, use --max-connection-per-server=4 --min-split-size=1M.
aria2c -x 4 -k 1M url
对我来说非常有效(每个连接限制为100k的服务器,让我可以使用所述参数以400k下载)
aria2
它不支持递归HTTP下载,因此wget
如果-r
需要的话,它不合标准。
由于尚未提到GNU parallel,因此让我给出另一种方式:
cat url.list | parallel -j 8 wget -O {#}.html {}
我找到了(可能) 一个解决方案
从一台服务器下载数千个日志文件到另一台服务器的过程中,我突然需要在BSD中进行一些认真的多线程下载,最好是使用Wget,因为这是我想到的最简单的处理方法。环顾四周,使我想到了这个小块:
wget -r -np -N [url] & wget -r -np -N [url] & wget -r -np -N [url] & wget -r -np -N [url]
只需
wget -r -np -N [url]
根据需要重复尽可能多的线程...现在考虑到这还不是很漂亮,并且肯定有更好的方法可以执行此操作,但是如果您想要快速又脏的东西应该可以解决问题...
注:选择-N
品牌wget
只下载“更新”文件,这意味着它不会覆盖或重新下载文件,除非在服务器上的时间戳的变化。
-nc
选项:“ no clobber”-它使wget忽略Aready下载(甚至部分下载)的文件。
wget -i list.txt -nc & wget -i list.txt -nc & wget -i list.txt -nc
很有效:非常丑陋,但是,它可以工作。:P
-b
标志将在后台运行wget进程,以替代&
内置的bash 作业控制。如果-o <filename>
未指定,则STDOUT将写入wget-log 。非常适合脚本编写。有关更多详细信息,请参见wget(1)。
可以执行此操作的另一个程序是axel
。
axel -n <NUMBER_OF_CONNECTIONS> URL
对于基本HTTP身份验证,
axel -n <NUMBER_OF_CONNECTIONS> "user:password@https://domain.tld/path/file.ext"
axel -n 4 "user:pasword@http://domain.tld/path/file.ext"
新的(但尚未发布)工具是Mget。它具有Wget已知的许多选项,并带有一个库,可让您轻松地将(递归)下载嵌入到自己的应用程序中。
要回答您的问题:
mget --num-threads=4 [url]
更新
Mget现在作为Wget2开发,具有许多错误修复和更多功能(例如HTTP / 2支持)。
--num-threads
现在--max-threads
。
我强烈建议使用httrack。
例如: httrack -v -w http://example.com/
默认情况下,它将做一个具有8个同时连接的镜像。Httrack有很多玩的地方。看一看。
正如其他海报所提到的,我建议您看看aria2。在版本1.16.1的Ubuntu手册页中:
aria2是用于下载文件的实用程序。支持的协议是HTTP(S),FTP,BitTorrent和Metalink。aria2可以从多个来源/协议下载文件,并尝试利用最大下载带宽。它支持同时从HTTP(S)/ FTP和BitTorrent下载文件,而从HTTP(S)/ FTP下载的数据被上传到BitTorrent群。使用Metalink的块校验和,aria2在下载BitTorrent之类的文件时会自动验证数据块。
您可以使用该-x
标志指定每个服务器的最大连接数(默认值:1):
aria2c -x 16 [url]
如果可以从多个位置访问同一文件,则可以选择从所有位置下载。使用该-j
标志可以指定每个静态URI的最大并行下载数(默认值:5)。
aria2c -j 5 [url] [url2]
有关更多信息,请访问http://aria2.sourceforge.net/。有关使用情况的信息,手册页实际上是描述性的,并在底部带有使用示例的部分。可以在http://aria2.sourceforge.net/manual/zh/html/README.html上找到在线版本。
用于xargs
使wget
并行处理多个文件
#!/bin/bash
mywget()
{
wget "$1"
}
export -f mywget
# run wget in parallel using 8 thread/connection
xargs -P 8 -n 1 -I {} bash -c "mywget '{}'" < list_urls.txt
Aria2选项,正确处理小于20mb的文件
aria2c -k 2M -x 10 -s 10 [url]
-k 2M
将文件分成2mb的块
-k
或--min-split-size
默认值为20mb,如果您未将此选项和文件设置为20mb以下,则无论-x
or的值是多少,它都只能在单个连接中运行。-s
考虑使用正则表达式或FTP Globbing。这样,您可以使用不同的文件名起始字符组多次启动wget,具体取决于它们的出现频率。
例如,这是我如何在两个NAS之间同步文件夹:
wget --recursive --level 0 --no-host-directories --cut-dirs=2 --no-verbose --timestamping --backups=0 --bind-address=10.0.0.10 --user=<ftp_user> --password=<ftp_password> "ftp://10.0.0.100/foo/bar/[0-9a-hA-H]*" --directory-prefix=/volume1/foo &
wget --recursive --level 0 --no-host-directories --cut-dirs=2 --no-verbose --timestamping --backups=0 --bind-address=10.0.0.11 --user=<ftp_user> --password=<ftp_password> "ftp://10.0.0.100/foo/bar/[!0-9a-hA-H]*" --directory-prefix=/volume1/foo &
第一个wget同步所有以/开头的文件/文件夹0, 1, 2... F, G, H
,第二个线程同步其他所有内容。
这是在具有一个10G以太网端口(10.0.0.100)的NAS和具有两个1G以太网端口(10.0.0.10和10.0.0.11)之间进行同步的最简单方法。我将两个wget线程绑定--bind-address
到不同的以太网端口,并&
在每行的末尾将它们并行调用。这样一来,我能够以2x 100 MB / s = 200 MB / s的总容量复制大型文件。