Wget kullanarak birden fazla eşzamanlı indirme?


Yanıtlar:


197

aria2'yi kullanın:

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

http://aria2.sourceforge.net

Onu seviyorum !!


26
Bunun bir web sitesini indirmeye nasıl yardımcı olduğunu görmüyorum - sadece 1 dosya indiriyor gibi görünüyor. Bu doğruysa - oylar -ve olmalıdır.
Stephen

8
Kabul ediyorum, bu iyi bir cevap değil, çünkü aria2 wget veya lftp gibi web veya ftp yansıtma yapamaz. lftp, çoklu bağlantıların yanı sıra yansıtma da yapar.
Anachronist

9
Unutma -sbölünme sayısını belirtmek için, ve -kaksi takdirde ulaşmak asla olabilir - bölünmüş segmenti başına minimum boyutu belirtmek -xmax bağlantıları.
Bob

2
@Stephen bu çok daha hızlı çok büyük dosyalar indirmektir gelen sunucuya çoklu priz kullanarak bir yerine web sitelerinde. Bu bir web sitesini kazıma anlamına gelmez.
gabeio

çorapları desteklemez *
Fedcomp

111

Wget, dosyaların indirilmesini hızlandırmak için çoklu soket bağlantılarını desteklemez.

Galce cevabından biraz daha iyi yapabileceğimizi düşünüyorum.

Doğru yol kullanmaktır aria2.

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

19
Belge -x, --max-connection-per-server=NUM The maximum number of connections to one server for each download. Possible Values: 1-16 Default: 1ve-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

Parametreleri detaylandırdığınız için teşekkürler, Nick.
thomas.han

4
Seçenek -s tek başına artık 1.10 sürümünden bu yana tek bir sunucudan bir dosyayı bölmez. Birden fazla bağlantı kurmaya zorlamak için sunucu başına maksmax bağlantı birlikte kullanılmalıdır. Aria2 belgelerine bakın: 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
@ SamuelLi güncellemesinin kısayolu aria2c -x 4 -k 1M urlbenim için iyi çalıştı ve (bağlantı başına 100k sınırına sahip bir sunucu, söz konusu parametrelerle 400k'de indirmeme izin verin)
EkriirkE

Kritik, aria2yok değil bunun için bir standart altı yedek yapım özyinelemeli HTTP indirmeleri destekleyen wgeteğer -rarzu edilir.
user2943160

55

GNU paralelinden henüz bahsedilmediğinden, başka bir yol vereyim:

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

5
Bu ilginç bir yaklaşım. Büyük bir dosya indirmeniz gerektiğinde ve bağlantı başına sınırlı bir hıza sahip olduğunuzda gerçekten geçerli değildir, ancak birden fazla dosya indirirken yararlı olabilir.
Nikola Petkanski

Bu komutu çalıştırmak listeyi 8 kez çalıştırır, değil mi? Aynı şekilde yaptım ve her satırı 8 paralellikle işlemek yerine, tüm listeyi 8 kez işliyor.
DomainsFeatured

4
Hayır, 8 iş listesini listeler
Nikolay Shmyrev

Tamam, kesinlikle garip bir şey yapıyorum. Bunu çözecek. Hızlı cevabınız için teşekkür ederim.
DomainsFeatured

1
Yine de bu işe yaramaz bir kullanımcat . Bu sınırlı bağlamda, oldukça zararsızdır, ancak belki de bu karşıtlığı devam ettirmek istemezsiniz.
Üçlü

39

(Muhtemelen) bir çözüm buldum

Bir sunucudan diğerine birkaç bin günlük dosyası indirme sürecinde aniden BSD'de, tercihen Wget ile, bunu ele almayı düşünebileceğim en basit yol olduğu için ciddi çok iş parçacıklı bir indirme yapmaya ihtiyacım vardı. Biraz etrafa bakmak beni bu küçük külçeye götürdü:

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

Sadece wget -r -np -N [url]ihtiyacınız kadar çok iş parçacığı için tekrarlayın ... Şimdi bu hoş değil ve bunu yapmak için kesinlikle daha iyi yollar var ama hızlı ve kirli bir şey istiyorsanız hile yapmalıdır ...

Not: seçenek -Nmarkaları wgeto olacak, yani sadece "yeni" dosya indirmek değil üzerine yazma veya yeniden indir dosyaları sunucuda onların damgası değişmedikçe.


11
Ancak bu, her işlem için tüm yapay nesneleri indirmiyor mu?
Kai Mattern

10
@KaiMattern: -ncseçeneği ekleyin : " clobber " - wget'in indirilmiş (kısmen de olsa) dosyaları görmezden gelmesine neden olur.
SF.

1
İndirmem gereken görüntülerin bir listesi vardı ve bu benim için de işe yaradı: wget -i list.txt -nc & wget -i list.txt -nc & wget -i list.txt -ncÇok çirkin, ama hey, işe yarıyor. : P
Jared

1
Bu bağlantılardan birinin bir nedenle kesilmesi, diğer bağlantılara dokunmadan tamamlanmamış dosyalar verir. Bu yöntem bütünlük sorunları yaratır.
muhammedv

-bBayrak Bash'in alternatif olarak, arka planda wget sürecini çalışacaktır &yerleşik iş kontrolü. STDOUT -o <filename>belirtilmezse wget-log dosyasına yazılacaktır . Komut dosyası oluşturmak için iyi. Daha fazla bilgi için wget (1) 'e bakınız.
Paul

21

Bunu yapabilen başka bir program axel.

axel -n <NUMBER_OF_CONNECTIONS> URL

Baisic HTTP Yetkilendirmesi için,

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

Ubuntu man sayfası .


5
Bu program, bazı durumlarda çok faydalı olan sınırsız sayıda bağlantıya izin verir.
uglide

1
Harika bir araç. centos6.xi için kullanılan rpm.pbone.net/index.php3/stat/4/idpl/16390122/dir/redhat_el_6/…
satch_boogie

Axel HTTP temel yetkilendirmesi yapamaz :(
rustyx

1
Genellikle yaparımaxel -n 4 "user:pasword@http://domain.tld/path/file.ext"
Lord Loh.

bir klasörü özyinelemeli olarak indirmek için axel kullanabilir miyim?
Ryan Arief

17

Yeni (ama henüz yayınlanmayan) bir araç Mget . Zaten Wget bilinen birçok seçenek vardır ve kolayca kendi uygulamanıza indirme (özyinelemeli) gömmek sağlayan bir kütüphane ile birlikte gelir.

Soruna cevap vermek için:

mget --num-threads=4 [url]

GÜNCELLEME

Mget artık birçok hata ve daha fazla özelliğe sahip Wget2 olarak geliştirildi (örn. HTTP / 2 desteği).

--num-threadsşimdi --max-threads.


Güzel bulmak. Teşekkür ederim!
user9869932

mac üzerinde wget2 nasıl kurulur? Site yalnızca kaynaktan nasıl kurulacağını ve otomatik nokta almada sorun yaşadığını belgeliyor
Chris

TravisCI betiğinde gettext (autopoint dahil) yüklemek için homebrew kullanıyoruz. Wget2 deposundan .travis_setup.sh dosyasına bir göz atın.
rockdaboot

13

Ben kesinlikle httrack kullanmanızı öneririm.

örn: httrack -v -w http://example.com/

Varsayılan olarak 8 eşzamanlı bağlantıya sahip bir ayna yapar. Httrack'ın nerede oynanacağı bir ton seçeneği var. Bir bak.


@ aaa90210: Program eksikliklerini kısa ve öz bir şekilde açıklarsanız harika olur. ArturBodera'nın yorumu çok daha bilgilendiricidir.
Richard

@ArturBodera Programınızı çalıştırdığınız klasöre cookies.txt dosyası ekleyebilirsiniz; bu çerezler otomatik olarak indirme başlığına eklenir.
Bertoncelj1

httrack aşağıdaki yönlendirmeleri desteklemiyor
Chris Hunt

11

Diğer posterlerin de belirttiği gibi, aria2'ye bir göz atmanızı öneririm . 1.16.1 sürümü için Ubuntu kılavuz sayfasından:

aria2 dosyaları indirmek için bir yardımcı programdır. Desteklenen protokoller HTTP (S), FTP, BitTorrent ve Metalink'tir. aria2 birden fazla kaynaktan / protokolden bir dosya indirebilir ve maksimum indirme bant genişliğinizi kullanmaya çalışır. HTTP (S) / FTP ve BitTorrent'den aynı anda dosya indirmeyi desteklerken, HTTP (S) / FTP'den indirilen veriler BitTorrent sürüsüne yüklenir. Metalink'in yığın sağlama toplamlarını kullanarak aria2, BitTorrent gibi bir dosyayı indirirken otomatik olarak veri yığınlarını doğrular.

-xBayrağı, sunucu başına maksimum bağlantı sayısını belirtmek için kullanabilirsiniz (varsayılan: 1):

aria2c -x 16 [url] 

Aynı dosya birden fazla konumdan kullanılabiliyorsa, hepsinden indirmeyi seçebilirsiniz. -jHer statik URI için maksimum paralel indirme sayısını belirtmek için bayrağı kullanın (varsayılan: 5).

aria2c -j 5 [url] [url2]

Daha fazla bilgi için http://aria2.sourceforge.net/ adresine bakın . Kullanım bilgileri için kılavuz sayfası gerçekten açıklayıcıdır ve altta kullanım örnekleri içeren bir bölüm vardır. Çevrimiçi bir sürümü http://aria2.sourceforge.net/manual/en/html/README.html adresinde bulabilirsiniz .


8

wget birden fazla bağlantıda indiremez, bunun yerine aria2 gibi başka bir program kullanıcı deneyebilirsiniz.



4

kullanım

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

websites.txt dosyasında satır başına 1 URL koyun, örnek:

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

Onlar her zaman bağlıdır söylüyorlar ama bir web sitesi yansıtmak söz konusu olduğunda En iyisi httrack var . Süper hızlı ve çalışması kolaydır. Tek dezavantajı destek forumu denir, ancak resmi belgeleri kullanarak yolunuzu bulabilirsiniz . Hem GUI hem de CLI arayüzüne sahiptir ve çerezleri destekler sadece dokümanları okur Bu en iyisidir. (Bu araçla tüm sürücüyü sabit sürücünüze indirebilirsiniz)

httrack -c8 [url]

Sunucu aşırı yüklenmesini önlemek için varsayılan olarak maksimum eşzamanlı bağlantı sayısı 8 ile sınırlıdır


2

paralel olarak birden fazla dosyada çalışma xargsyapmak için kullanınwget

#!/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 seçenekleri, 20mb'den küçük dosyalarla doğru çalışma şekli

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

-k 2M dosyayı 2mb parçaya böl

-kveya --min-split-size20mb varsayılan değerine sahipse, bu seçeneği ve 20mb'nin altındaki dosyayı ayarlamazsanız, hangi değer olursa olsun yalnızca tek bir bağlantıda çalışır -xveya-s


1

makekolayca paralelleştirilebilir (ör make -j 4.). Örneğin, Makefiledosyaları wget kullanarak paralel olarak indirmek için kullandığım basit :

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

Normal İfadeler veya FTP Globbing kullanmayı düşünün . Böylece, oluşum sıklıklarına bağlı olarak farklı dosya adı başlangıç ​​karakterleri grupları ile birden çok kez wget başlatabilirsiniz.

Örneğin, iki NAS arasında bir klasörü nasıl senkronize ederim:

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 &

İlk wget ile başlayan tüm dosyaları / klasörleri 0, 1, 2... F, G, Hve ikinci iş parçacığı diğer her şeyi senkronize eder.

Bu, bir 10G ethernet bağlantı noktasına (10.0.0.100) sahip bir NAS ile iki 1G ethernet bağlantı noktasına sahip bir NAS (10.0.0.10 ve 10.0.0.11) arasında eşitleme yapmanın en kolay yoluydu. İki wget iş parçacığını --bind-addressfarklı ethernet bağlantı noktalarına bağladım ve &her satırın sonuna koyarak paralel olarak çağırdım . Böylece toplamda 2x 100 MB / s = 200 MB / s büyük dosyaları kopyalayabildim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.