Web sitesi içeriğini indirmek için wget kullanıyorum, ancak wget dosyaları tek tek indiriyor.
4 eşzamanlı bağlantıyı kullanarak nasıl wget indirebilirim?
Web sitesi içeriğini indirmek için wget kullanıyorum, ancak wget dosyaları tek tek indiriyor.
4 eşzamanlı bağlantıyı kullanarak nasıl wget indirebilirim?
Yanıtlar:
aria2'yi kullanın:
aria2c -x 16 [url]
# |
# |
# |
# ----> the number of connections
Onu seviyorum !!
-s
bölünme sayısını belirtmek için, ve -k
aksi takdirde ulaşmak asla olabilir - bölünmüş segmenti başına minimum boyutu belirtmek -x
max bağlantıları.
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
-x, --max-connection-per-server=NUM The maximum number of connections to one server for each download. Possible Values: 1-16 Default: 1
ve-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
benim 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)
aria2
yok değil bunun için bir standart altı yedek yapım özyinelemeli HTTP indirmeleri destekleyen wget
eğer -r
arzu edilir.
GNU paralelinden henüz bahsedilmediğinden, başka bir yol vereyim:
cat url.list | parallel -j 8 wget -O {#}.html {}
cat
. Bu sınırlı bağlamda, oldukça zararsızdır, ancak belki de bu karşıtlığı devam ettirmek istemezsiniz.
(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 -N
markaları wget
o olacak, yani sadece "yeni" dosya indirmek değil üzerine yazma veya yeniden indir dosyaları sunucuda onların damgası değişmedikçe.
-nc
seçeneği ekleyin : " clobber " - wget'in indirilmiş (kısmen de olsa) dosyaları görmezden gelmesine neden olur.
wget -i list.txt -nc & wget -i list.txt -nc & wget -i list.txt -nc
Çok çirkin, ama hey, işe yarıyor. : P
-b
Bayrak 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.
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"
axel -n 4 "user:pasword@http://domain.tld/path/file.ext"
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
.
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.
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.
-x
Bayrağı, 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. -j
Her 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 .
wget birden fazla bağlantıda indiremez, bunun yerine aria2 gibi başka bir program kullanıcı deneyebilirsiniz.
pcurl'u dene
http://sourceforge.net/projects/pcurl/
wget yerine curl kullanır, paralel olarak 10 segmentte indirir.
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
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
paralel olarak birden fazla dosyada çalışma xargs
yapmak 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
-k
veya --min-split-size
20mb 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 -x
veya-s
make
kolayca paralelleştirilebilir (ör make -j 4
.). Örneğin, Makefile
dosyaları 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
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, H
ve 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-address
farklı 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.