Ich verwende wget, um Website-Inhalte herunterzuladen, aber wget lädt die Dateien einzeln herunter.
Wie kann ich wget über 4 gleichzeitige Verbindungen herunterladen?
Ich verwende wget, um Website-Inhalte herunterzuladen, aber wget lädt die Dateien einzeln herunter.
Wie kann ich wget über 4 gleichzeitige Verbindungen herunterladen?
Antworten:
benutze die aria2:
aria2c -x 16 [url]
# |
# |
# |
# ----> the number of connections
Ich liebe es !!
-s
, die Anzahl der Teilungen und -k
die Mindestgröße pro Teilungssegment anzugeben. Andernfalls erreichen Sie möglicherweise nie die -x
maximale Anzahl von Verbindungen.
Wget unterstützt keine Verbindungen mit mehreren Sockets, um das Herunterladen von Dateien zu beschleunigen.
Ich denke, wir können ein bisschen besser als gmarian antworten.
Der richtige Weg ist zu verwenden 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
und-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
und hat gut für mich funktioniert (ein Server mit einem Limit von 100.000 pro Verbindung lässt mich bei 400.000 mit diesen Parametern herunterladen)
aria2
unterstützt keine rekursiven HTTP-Downloads, was es zu einem minderwertigen Ersatz macht, wget
wenn dies -r
gewünscht wird.
Da GNU parallel noch nicht erwähnt wurde, möchte ich einen anderen Weg angeben:
cat url.list | parallel -j 8 wget -O {#}.html {}
cat
. In diesem begrenzten Kontext ist es ziemlich harmlos, aber vielleicht möchten Sie dieses Antimuster nicht verüben.
Ich habe (wahrscheinlich) eine Lösung gefunden
Beim Herunterladen einiger tausend Protokolldateien von einem Server zum nächsten musste ich plötzlich ernsthafte Multithread-Downloads in BSD durchführen, vorzugsweise mit Wget, da dies die einfachste Möglichkeit war, dies zu handhaben. Ein kleiner Blick führte mich zu diesem kleinen Nugget:
wget -r -np -N [url] & wget -r -np -N [url] & wget -r -np -N [url] & wget -r -np -N [url]
Wiederholen
wget -r -np -N [url]
Sie dies einfach für so viele Threads, wie Sie benötigen ... Nun, da dies nicht schön ist und es sicherlich bessere Möglichkeiten gibt, dies zu tun, aber wenn Sie etwas schnelles und schmutziges wollen, sollte es den Trick tun ...
Hinweis: die Option -N
macht wget
nur Download „neuere“ Dateien, was bedeutet , es wird nicht überschreiben oder neu Download - Dateien , wenn ihre Zeitstempel Änderungen auf dem Server.
-nc
Option "no clobber" hinzu. Dadurch ignoriert wget bereits heruntergeladene (auch teilweise) Dateien.
wget -i list.txt -nc & wget -i list.txt -nc & wget -i list.txt -nc
Sehr hässlich, aber hey, es funktioniert. : P
-b
Flag führt den wget-Prozess im Hintergrund aus, als Alternative zur integrierten &
Jobsteuerung von bash . STDOUT wird in wget-log geschrieben, wenn -o <filename>
nichts angegeben ist. Gut für Skripte. Siehe wget (1) für weitere Details.
Ein anderes Programm, das dies tun kann, ist axel
.
axel -n <NUMBER_OF_CONNECTIONS> URL
Für baisic HTTP Auth,
axel -n <NUMBER_OF_CONNECTIONS> "user:password@https://domain.tld/path/file.ext"
axel -n 4 "user:pasword@http://domain.tld/path/file.ext"
Ein neues (aber noch nicht veröffentlichtes) Tool ist Mget . Es verfügt bereits über viele von Wget bekannte Optionen und eine Bibliothek, mit der Sie das Herunterladen einfach (rekursiv) in Ihre eigene Anwendung einbetten können.
Zur Beantwortung Ihrer Frage:
mget --num-threads=4 [url]
AKTUALISIEREN
Mget wurde jetzt als Wget2 entwickelt, mit vielen behobenen Fehlern und mehr Funktionen (z. B. HTTP / 2-Unterstützung).
--num-threads
ist jetzt --max-threads
.
Ich empfehle dringend, httrack zu verwenden.
Ex: httrack -v -w http://example.com/
Standardmäßig wird ein Spiegel mit 8 gleichzeitigen Verbindungen erstellt. Httrack bietet unzählige Möglichkeiten zum Spielen. Guck mal.
Wie andere Poster bereits erwähnt haben, würde ich vorschlagen, dass Sie sich aria2 ansehen . Von der Ubuntu-Manpage für Version 1.16.1:
aria2 ist ein Dienstprogramm zum Herunterladen von Dateien. Die unterstützten Protokolle sind HTTP (S), FTP, BitTorrent und Metalink. aria2 kann eine Datei von mehreren Quellen / Protokollen herunterladen und versucht, Ihre maximale Download-Bandbreite zu nutzen. Es unterstützt das gleichzeitige Herunterladen einer Datei von HTTP (S) / FTP und BitTorrent, während die von HTTP (S) / FTP heruntergeladenen Daten in den BitTorrent-Schwarm hochgeladen werden. Mit den Chunk-Prüfsummen von Metalink überprüft aria2 automatisch Datenblöcke, während eine Datei wie BitTorrent heruntergeladen wird.
Mit dem -x
Flag können Sie die maximale Anzahl von Verbindungen pro Server angeben (Standard: 1):
aria2c -x 16 [url]
Wenn dieselbe Datei an mehreren Speicherorten verfügbar ist, können Sie sie von allen herunterladen. Verwenden Sie das -j
Flag, um die maximale Anzahl paralleler Downloads für jeden statischen URI anzugeben (Standard: 5).
aria2c -j 5 [url] [url2]
Werfen Sie einen Blick auf http://aria2.sourceforge.net/ für weitere Informationen. Für Verwendungsinformationen ist die Manpage sehr beschreibend und enthält unten einen Abschnitt mit Verwendungsbeispielen. Eine Online-Version finden Sie unter http://aria2.sourceforge.net/manual/en/html/README.html .
wget kann nicht in mehreren Verbindungen heruntergeladen werden, stattdessen können Sie versuchen, ein anderes Programm wie aria2 zu verwenden.
versuchen Sie es mit pcurl
http://sourceforge.net/projects/pcurl/
verwendet curl anstelle von wget, Downloads in 10 Segmenten parallel.
verwenden
aria2c -x 10 -i websites.txt >/dev/null 2>/dev/null &
Geben Sie in website.txt 1 URL pro Zeile ein. Beispiel:
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
Sie sagen immer, es kommt darauf an, aber wenn es um das Spiegeln einer Website geht, gibt es den besten httrack . Es ist super schnell und einfach zu arbeiten. Der einzige Nachteil ist das sogenannte Support-Forum, aber Sie können sich anhand der offiziellen Dokumentation zurechtfinden . Es hat sowohl eine GUI- als auch eine CLI-Oberfläche und unterstützt Cookies. Lesen Sie einfach die Dokumente. Dies ist das Beste. (Mit diesem Tool können Sie das gesamte Web auf Ihre Festplatte herunterladen.)
httrack -c8 [url]
Standardmäßig ist die maximale Anzahl gleichzeitiger Verbindungen auf 8 begrenzt, um eine Überlastung des Servers zu vermeiden
Verwenden Sie xargs
diese Option, um wget
mehrere Dateien parallel zu bearbeiten
#!/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-Optionen, Der richtige Weg, um mit Dateien zu arbeiten, die kleiner als 20 MB sind
aria2c -k 2M -x 10 -s 10 [url]
-k 2M
Datei in 2 MB Block aufteilen
-k
oder --min-split-size
hat einen Standardwert von 20 MB. Wenn Sie diese Option und Datei nicht unter 20 MB festlegen, wird sie nur in einer einzigen Verbindung ausgeführt, unabhängig vom Wert von -x
oder-s
make
kann leicht parallelisiert werden (zB make -j 4
). Hier ist zum Beispiel eine einfache Makefile
Methode, mit der ich Dateien parallel mit wget herunterladen kann:
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
Erwägen Sie die Verwendung von regulären Ausdrücken oder FTP-Globbing . Auf diese Weise können Sie wget mehrmals mit verschiedenen Gruppen von Dateinamen-Startzeichen starten, abhängig von ihrer Häufigkeit.
So synchronisiere ich beispielsweise einen Ordner zwischen zwei 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 &
Das erste Wget synchronisiert alle Dateien / Ordner beginnend mit 0, 1, 2... F, G, H
und der zweite Thread synchronisiert alles andere.
Dies war der einfachste Weg, um zwischen einem NAS mit einem 10G-Ethernet-Port (10.0.0.100) und einem NAS mit zwei 1G-Ethernet-Ports (10.0.0.10 und 10.0.0.11) zu synchronisieren. Ich habe die beiden Wget-Threads --bind-address
an die verschiedenen Ethernet-Ports gebunden und sie parallel genannt, indem ich sie &
am Ende jeder Zeile platziert habe. Dadurch konnte ich riesige Dateien mit insgesamt 2x 100 MB / s = 200 MB / s kopieren.