Nhiều tải xuống đồng thời bằng Wget?


Câu trả lời:


197

sử dụng aria2:

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

http://aria2.sourceforge.net

Tôi thích nó !!


26
Tôi không thấy cách này giúp tải xuống một trang web - có vẻ như nó chỉ tải xuống 1 tệp. Nếu điều này là đúng - phiếu bầu phải là -ve.
Stephen

8
Tôi đồng ý, đây không phải là một câu trả lời hay, vì aria2 không thể làm web hoặc phản chiếu ftp như wget hoặc lftp. lftp không phản chiếu cũng như hỗ trợ nhiều kết nối.
Anachronist

9
Đừng quên -schỉ định số lượng phân chia và -kchỉ định kích thước tối thiểu cho mỗi phân đoạn - nếu không, bạn có thể không bao giờ đạt được các -xkết nối tối đa.
Bob

2
@Stephen này là để tải xuống các tệp rất lớn nhanh hơn nhiều từ các trang web bằng cách sử dụng nhiều ổ cắm vào máy chủ thay vì một. Điều này không có nghĩa là để cạo một trang web.
gabeio

không hỗ trợ vớ *
Fedcomp

111

Wget không hỗ trợ nhiều kết nối ổ cắm để tăng tốc độ tải xuống các tệp.

Tôi nghĩ rằng chúng ta có thể làm tốt hơn một chút so với câu trả lời của gmarian.

Cách chính xác là sử dụng aria2.

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

19
Để tài liệu -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
Nick

Cảm ơn bạn đã xây dựng các thông số, Nick.
thomas.han

4
Tùy chọn -s một mình không còn phân tách một tệp từ một máy chủ kể từ khi phát hành 1.10. Người ta cần sử dụng --max-Connection-per-server để buộc thiết lập nhiều kết nối. Xem tài liệu aria2: 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.
Samuel Li

1
Các viết tắt của @ cập nhật SamuelLi là aria2c -x 4 -k 1M urlvà làm việc tốt cho tôi (một máy chủ với một giới hạn 100k cho mỗi kết nối để tôi tải về tại 400k với các thông số nói)
EkriirkE

Vấn đề nghiêm trọng aria2nào không hỗ trợ tải HTTP đệ quy, làm cho nó một sự thay thế không đạt tiêu chuẩn cho wgetnếu -rđược mong muốn.
dùng2943160

54

Vì GNU song song chưa được đề cập, tôi xin đưa ra một cách khác:

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

4
Đó là cách tiếp cận thú vị. Không thực sự áp dụng khi bạn cần tải xuống một tệp lớn và bạn bị giới hạn tốc độ trên mỗi kết nối, nhưng có thể hữu ích khi tải xuống nhiều tệp.
Nikola Petkanski

Chạy lệnh này sẽ chạy danh sách 8 lần, phải không? Tôi đã làm theo cách tương tự và thay vì xử lý mỗi dòng với 8 điểm tương tự, nó chỉ xử lý toàn bộ danh sách 8 lần.
Tên miền được thực hiện vào

4
Không, nó phân chia danh sách trên 8 công việc
Nikolay Shmyrev

Được rồi, tôi chắc chắn đang làm điều gì đó kỳ lạ. Sẽ tìm ra nó. Cảm ơn đã phản ứng nhanh chóng.
Tên miền được thực hiện vào

1
Đó là một cách sử dụng vô dụngcat , mặc dù. Trong bối cảnh hạn chế này, nó khá vô hại, nhưng có lẽ bạn không muốn duy trì mô hình này.
tripleee

39

Tôi tìm thấy (có lẽ) một giải pháp

Trong quá trình tải xuống vài nghìn tệp nhật ký từ máy chủ này sang máy chủ tiếp theo, tôi đột nhiên có nhu cầu tải xuống đa luồng nghiêm trọng trong BSD, tốt nhất là với Wget vì đó là cách đơn giản nhất tôi có thể nghĩ đến khi xử lý việc này. Một chút nhìn xung quanh đã dẫn tôi đến cái nugget nhỏ này:

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

Chỉ cần lặp lại số wget -r -np -N [url]lượng chủ đề mà bạn cần ... Bây giờ, điều này không đẹp và chắc chắn có nhiều cách tốt hơn để làm điều này nhưng nếu bạn muốn thứ gì đó nhanh và bẩn thì nên thực hiện thủ thuật ...

Lưu ý: tùy chọn -Nlàm cho wgettải về chỉ "mới hơn" tác phẩm, có nghĩa là nó sẽ không ghi đè hoặc tái tải file trừ khi thay đổi dấu thời gian của họ trên máy chủ.


11
Nhưng không tải xuống toàn bộ bộ tạo tác cho mỗi quy trình?
Kai Myme

10
@KaiMotype: thêm -nctùy chọn: "no clobber" - nó khiến wget bỏ qua các tập tin được tải xuống (thậm chí một phần).
SF.

1
Tôi đã có một danh sách các hình ảnh tôi cần tải xuống, và điều này cũng hiệu quả với tôi: wget -i list.txt -nc & wget -i list.txt -nc & wget -i list.txt -ncRất xấu, nhưng này, nó hoạt động. : P
Jared

1
Có một trong những kết nối bị hỏng vì một số lý do mang lại cho bạn các tệp chưa hoàn thành mà không bị các kết nối khác chạm vào. Phương pháp này tạo ra các vấn đề toàn vẹn.
muhammedv

Các -blá cờ sẽ chạy quá trình wget ở chế độ nền, như là một thay thế cho bash của &điều khiển công việc built-in. STDOUT sẽ được ghi vào wget-log nếu -o <filename>không được chỉ định. Tốt cho kịch bản. Xem wget (1) để biết thêm chi tiết.
Paul

21

Một chương trình khác có thể làm điều này là axel.

axel -n <NUMBER_OF_CONNECTIONS> URL

Đối với Auth HTTP baisic,

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

Trang người đàn ông Ubuntu .


5
chương trình này cho phép số lượng kết nối không giới hạn, rất hữu ích trong một số trường hợp.
uglide 14/07/2015

1
Công cụ tuyệt vời. cho centos6.xi đã sử dụng rpm.pbone.net/index.php3/stat/4/idpl/16390122/dir/redhat_el_6/
trộm

Axel không thể thực hiện xác thực cơ bản HTTP :(
rustyx

1
Tôi thường làmaxel -n 4 "user:pasword@http://domain.tld/path/file.ext"
Lord Loh.

Tôi có thể sử dụng axel để tải về đệ quy toàn bộ thư mục không?
Ryan Arief

17

Một công cụ mới (nhưng chưa được phát hành) là Mget . Nó đã có nhiều tùy chọn được biết đến từ Wget và đi kèm với một thư viện cho phép bạn dễ dàng nhúng (đệ quy) tải xuống ứng dụng của riêng bạn.

Để trả lời câu hỏi của bạn:

mget --num-threads=4 [url]

CẬP NHẬT

Mget hiện được phát triển dưới dạng Wget2 với nhiều lỗi được sửa và nhiều tính năng hơn (ví dụ: hỗ trợ HTTP / 2).

--num-threadstại là --max-threads.


Đẹp tìm thấy. Cảm ơn bạn!
user9869932

Bất kỳ lời khuyên về cách cài đặt wget2 trên máy Mac? Trang web chỉ cung cấp tài liệu về cách cài đặt nó từ nguồn và gặp sự cố khi tự động truy cập
Chris

Trong kịch bản TravisCI, chúng tôi sử dụng homebrew để cài đặt gettext (bao gồm autopoint). Hãy xem .travis_setup.sh từ repo wget2.
rockdaboot

13

Tôi đề nghị sử dụng omerack.

Ví dụ: httrack -v -w http://example.com/

Nó sẽ làm một tấm gương với 8 kết nối đồng thời như mặc định. Httrack có rất nhiều tùy chọn để chơi. Có một cái nhìn.


@ aaa90210: Sẽ thật tuyệt nếu bạn giải thích ngắn gọn về sự thiếu hụt của chương trình. Nhận xét của ArturBodera có nhiều thông tin hơn.
Richard

@ArturBodera Bạn có thể thêm tệp cookies.txt vào thư mục mà bạn đang chạy chương trình của mình và nó sẽ tự động thêm các cookie đó vào tiêu đề tải xuống.
Bertoncelj1

omerack không hỗ trợ theo các chuyển hướng
Chris Hunt

11

Như các áp phích khác đã đề cập, tôi khuyên bạn nên xem aria2 . Từ trang man Ubuntu cho phiên bản 1.16.1:

aria2 là một tiện ích để tải tập tin. Các giao thức được hỗ trợ là HTTP (S), FTP, BitTorrent và Metalink. aria2 có thể tải xuống một tệp từ nhiều nguồn / giao thức và cố gắng sử dụng băng thông tải xuống tối đa của bạn. Nó hỗ trợ tải xuống một tệp từ HTTP (S) / FTP và BitTorrent cùng một lúc, trong khi dữ liệu được tải xuống từ HTTP (S) / FTP được tải lên bầy BitTorrent. Sử dụng tổng kiểm tra khối của Metalink, aria2 tự động xác thực các khối dữ liệu trong khi tải xuống một tệp như BitTorrent.

Bạn có thể sử dụng -xcờ để chỉ định số lượng kết nối tối đa cho mỗi máy chủ (mặc định: 1):

aria2c -x 16 [url] 

Nếu cùng một tệp có sẵn từ nhiều vị trí, bạn có thể chọn tải xuống từ tất cả chúng. Sử dụng -jcờ để chỉ định số lượng tải xuống song song tối đa cho mỗi URI tĩnh (mặc định: 5).

aria2c -j 5 [url] [url2]

Hãy xem http://aria2.sourceforge.net/ để biết thêm thông tin. Đối với thông tin sử dụng, trang man thực sự mô tả và có một phần ở phía dưới với các ví dụ sử dụng. Có thể tìm thấy phiên bản trực tuyến tại http://aria2.sourceforge.net/manual/en/html/README.html .


8

wget không thể tải xuống trong nhiều kết nối, thay vào đó bạn có thể thử sử dụng chương trình khác như aria2.



4

sử dụng

aria2c -x 10 -i websites.txt >/dev/null 2>/dev/null &

trong website.txt đặt 1 url trên mỗi dòng, ví dụ:

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

2

Họ luôn luôn nói nó phụ thuộc nhưng khi nói đến việc phản ánh một trang web tốt nhất tồn tại httrack . Nó là siêu nhanh và dễ dàng để làm việc. Nhược điểm duy nhất là nó được gọi là diễn đàn hỗ trợ nhưng bạn có thể tìm đường bằng tài liệu chính thức . Nó có cả giao diện GUI và CLI và nó Hỗ trợ cookie chỉ cần đọc tài liệu Đây là cách tốt nhất. (Hãy cẩn thận với công cụ này, bạn có thể tải xuống toàn bộ web trên ổ cứng của mình)

httrack -c8 [url]

Theo mặc định, số lượng kết nối đồng thời tối đa là 8 để tránh quá tải máy chủ


2

sử dụng xargsđể làm wgetviệc trong nhiều tệp song song

#!/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

Tùy chọn Aria2, Cách làm việc đúng với tệp nhỏ hơn 20mb

aria2c -k 2M -x 10 -s 10 [url]

-k 2M chia tập tin thành 2mb chunk

-khoặc --min-split-sizecó giá trị mặc định là 20mb, nếu bạn không đặt tùy chọn này và tệp dưới 20mb, nó sẽ chỉ chạy trong một kết nối duy nhất cho dù giá trị của -xhoặc-s


1

makecó thể được song song dễ dàng (ví dụ, make -j 4). Ví dụ: đây là một cách đơn giản Makefilemà tôi đang sử dụng để tải xuống các tệp song song bằng 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

0

Xem xét sử dụng Biểu thức thông thường hoặc Globbing FTP . Do đó, bạn có thể bắt đầu wget nhiều lần với các nhóm ký tự bắt đầu tên tệp khác nhau tùy thuộc vào tần suất xuất hiện của chúng.

Đây là ví dụ về cách tôi đồng bộ hóa một thư mục giữa hai 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 đầu tiên đồng bộ tất cả các tệp / thư mục bắt đầu 0, 1, 2... F, G, Hvà luồng thứ hai đồng bộ hóa mọi thứ khác.

Đây là cách dễ nhất để đồng bộ giữa một NAS với một cổng ethernet 10G (10.0.0.100) và một NAS với hai cổng ethernet 1G (10.0.0.10 và 10.0.0.11). Tôi ràng buộc hai luồng wget thông qua --bind-addresscác cổng ethernet khác nhau và gọi chúng song song bằng cách đặt &ở cuối mỗi dòng. Bằng cách đó, tôi đã có thể sao chép các tệp khổng lồ với tổng số 2x 100 MB / s = 200 MB / s.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.