Download 使用Wget进行多个同时下载?

Download 使用Wget进行多个同时下载?,download,wget,Download,Wget,我使用wget下载网站内容,但是wget会一个接一个地下载文件 如何使用4个同时连接进行wget下载?wget无法在多个连接中下载,您可以尝试使用其他程序,如aria2。我发现(可能) 在从一台服务器下载几千个日志文件的过程中 接下来,我突然需要做一些严肃的多线程处理 在BSD中下载,最好使用Wget,因为这是最简单的方法 我可以考虑处理这件事。环顾四周,我发现 这个小金块: wget -r -np -N [url] & wget -r -np -N [url] & wget

我使用wget下载网站内容,但是wget会一个接一个地下载文件


如何使用4个同时连接进行wget下载?

wget无法在多个连接中下载,您可以尝试使用其他程序,如aria2。

我发现(可能)

在从一台服务器下载几千个日志文件的过程中 接下来,我突然需要做一些严肃的多线程处理 在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
只下载“较新”的文件,这意味着它不会覆盖或重新下载文件,除非它们的时间戳在服务器上发生更改。

尝试pcurl

使用curl代替wget,以10段并行下载。

使用aria2:

aria2c -x 16 [url]
#          |
#          |
#          |
#          ----> the number of connections 


我爱死它了

我强烈建议使用httrack

例如:
httrack-v-whttp://example.com/


默认情况下,它将执行8个同时连接的镜像。Httrack有大量的选项可供选择。看看。

正如其他海报所提到的,我建议你看看《阿里亚2》。从1.16.1版的Ubuntu手册页:

aria2是一个用于下载文件的实用程序。支持的协议有HTTP、FTP、BitTorrent和Metalink。aria2可以从多个源/协议下载文件,并尝试利用最大下载带宽。它支持同时从HTTP(S)/FTP和BitTorrent下载文件,同时将从HTTP(S)/FTP下载的数据上载到BitTorrent swarm。aria2使用Metalink的区块校验和,在下载BitTorrent等文件时自动验证数据区块

您可以使用
-x
标志指定每台服务器的最大连接数(默认值:1):

如果同一文件可从多个位置获得,则可以选择从所有位置下载。使用
-j
标志指定每个静态URI的最大并行下载次数(默认值:5)

有关更多信息,请查看。对于用法信息,手册页实际上是描述性的,在底部有一个包含用法示例的部分。在线版本可在上找到。

一个新的(但尚未发布)工具正在发布。 它已经有了许多Wget已知的选项,并附带了一个库,允许您轻松地将(递归)下载嵌入到自己的应用程序中

回答你的问题:

mget--num threads=4[url]

更新

Mget现在已开发为具有许多修复错误和更多功能(例如HTTP/2支持)


--num threads
现在是
--max threads

Wget不支持多个套接字连接以加快文件下载速度

我认为我们可以做得比gmarian的答案好一点

正确的方法是使用


另一个可以做到这一点的程序是
axel

axel -n <NUMBER_OF_CONNECTIONS> URL
axel-n URL
对于baisic HTTP Auth

axel -n <NUMBER_OF_CONNECTIONS> "user:password@https://domain.tld/path/file.ext"
axel-n“用户:password@https://domain.tld/path/file.ext”

.

既然还没有提到GNU parallel,让我给出另一种方式:

cat url.list | parallel -j 8 wget -O {#}.html {}

make
可以很容易地并行化(例如,
make-j4
)。例如,这里有一个简单的
Makefile
我使用wget并行下载文件:

BASE=http://www.somewhere.com/path/to
FILES=$(shell awk '{printf "%s.ext\n", $$1}' filelist.txt)
LOG=download.log

all: $(FILES)
    echo $(FILES)

%.ext:
    wget -N -a $(LOG) $(BASE)/$@

.PHONY: all
default: all

他们总是说这要看情况而定,但当涉及到镜像网站时,最好的方法是存在的。它是超快速和容易工作。唯一的缺点是它的所谓的支持论坛,但你可以找到你的方式使用。它有GUI和CLI界面,支持cookies,只需阅读文档即可。这是最好的。(使用此工具,您可以在硬盘上下载整个web)


默认情况下,同时连接的最大数量限制为8个以避免服务器过载使用
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
-k2m
将文件拆分为2mb块

-k
-min split size
的默认值为20mb,如果未设置此选项并将文件设置为20mb以下,则无论使用的是
-x
-s

的哪个值,它都将仅在单个连接中运行

aria2c -x 10 -i websites.txt >/dev/null 2>/dev/null &
在websites.txt中,每行放置1个url,例如:

https://www.example.com/1.mp4
https://www.example.com/2.mp4
https://www.example.com/3.mp4
https://www.example.com/4.mp4
https://www.example.com/5.mp4
考虑使用或。这样,您就可以根据文件名起始字符的出现频率,使用不同的文件名起始字符组多次启动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--recursive--level 0--no host dirs=2--no verbose--timestamping--backups=0--bind address=10.0.0.10--user=--password=”ftp://10.0.0.100/foo/bar/[0-9a-hA-H]*“--目录前缀=/volume1/foo&
wget--递归--级别0--无主机目录--剪切目录=2--无详细信息--时间戳--备份=0--绑定地址=10.0.0.11--用户=--密码=”ftp://10.0.0.100/foo/bar/[!0-9a-hA-H]*“--目录前缀=/volume1/foo&
第一个wget同步所有以
0,1,2。。。F、 G,H
和第二个线程同步所有其他线程


这是在具有一个10G以太网端口(10.0.0.100)的NAS和具有两个1G以太网端口(10.0.0.10和10.0.0.11)的NAS之间进行同步的最简单方法。我通过
--bind address
将两个wget线程绑定到不同的以太网端口,并通过将
&
放在每行的末尾来并行调用它们。到那时,我能够以2x 100 MB/s=200 MB/s的速度复制大文件。

为每个链接调用Wget,并将其设置为在backgro中运行
#!/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
aria2c -k 2M -x 10 -s 10 [url]
aria2c -x 10 -i websites.txt >/dev/null 2>/dev/null &
https://www.example.com/1.mp4
https://www.example.com/2.mp4
https://www.example.com/3.mp4
https://www.example.com/4.mp4
https://www.example.com/5.mp4
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 &
with open('links.txt', 'r')as f1:      # Opens links.txt file with read mode
  list_1 = f1.read().splitlines()      # Get every line in links.txt
for i in list_1:                       # Iteration over each link
  !wget "$i" -bq                       # Call wget with background mode
      b - Run in Background
      q - Quiet mode (No Output)
cat links.txt | xargs -P 4 -I{} wget {}