[[Vorlage(getestet, general)]] {{{#!vorlage wissen [:Pakete_installieren:Installation von Programmen] [:Terminal:Ein Terminal öffnen] }}} [[Inhaltsverzeichnis(2)]] [[Bild(Wiki/Icons/terminal.png, 48, left)]] [http://www.gnu.org/software/wget/ wget] {en} ist ein Programm, mit dem man direkt aus einem Terminal Dateien von FTP-, HTTP- oder HTTPS-Servern herunterladen kann. Das Programm ist sehr praktisch, wenn man in einem Shellscript Daten von Servern holen will, aber es ist auch ein sehr guter Downloadmanager. Downloads können zu einem späteren Zeitpunkt an der abgebrochenen Stelle fortgeführt werden. = Installation = Das Programm ist normalerweise in der Standardinstallation enthalten, kann ansonsten aber über das gleichnamige Paket installiert werden [1]: {{{#!vorlage Paketinstallation wget }}} = Aufruf = Aus einem Terminal heraus [2] kann man wget aufrufen: {{{#!vorlage Befehl wget OPTIONEN... URLs... }}} Im Folgenden sind einige Optionen aufgelistet. Alle Optionen findet man in der [:man:manpage] von wget. == Log- und Eingabe-Optionen == {{{#!vorlage Tabelle Option Beschreibung +++ ``-i DATEI``,``--input-file=DATEI `` Liest URLs aus einer Text- oder HTML-Datei aus. +++ ``-nv``,``--no-verbose`` Gibt nur die wichtigsten Informationen aus. +++ ``-q``, ``--quiet`` Verhindert dass wget Informationen auf der Konsole ausgibt. +++ ``-v``, ``--verbose`` Vollständige Ausgabe aller Informationen. (Standard) }}} == Download-Optionen == {{{#!vorlage Tabelle Option Beschreibung +++ ``-t X``, ``--tries=X`` Anzahl der Versuche X, die wget unternehmen soll eine Datei herunterzuladen. +++ ``-c``, ``--continue`` Versucht einen teilweise durchgeführten Download fortzusetzen. +++ ``-T X`` Zeitüberschreitung nach X Sekunden. Gilt für DNS-Abfrage, Verbindungsaufbau und letzten Datenempfang vom laufenden Download. Standard: 900. +++ ``-w X`` Bei mehreren Downloads, X Sekunden warten bis der Nächste angefordert wird. Entlastet den Server; Kann eine Verbannung wegen zu vieler Anfragen verhindern. +++ ``--random-wait`` Zufällige Wartezeit um Verbannung zu verhindern. Der mit der Option ''-w'' gesetzte Zeitraum wird mit einem zufälligen Multiplikator von 0.5 bis 1.5 abgewandelt. +++ ``--waitretry=X`` Nach fehlgeschlagenem Download X Sekunden abwarten bis zum nächsten Versuch. Entlastet Server. +++ ``-N`` Lädt nur dann die Datei herunter, wenn die Datei neuer ist als eine Datei gleichen Namens auf dem Heimrechner. +++ ``-O DATEI``, ``--output-document=DATEI`` Schreibe in `DATEI`. Diese Option kann nicht mit der Option `-N` zusammen verwendet werden.[[BR]]Gibt man `-O "-"` an, so schreibt wget den Inhalt der heruntergeladenen Datei direkt auf die Standardausgabe (stdout) des Terminals. Letzteres ist v.a. zum Auslesen von kurzen (Konfigurations-)Dateien sinnvoll. +++ ``--user=BENUTZER`` Gibt einen Benutzernamen für HTTP- bzw. FTP-Downloads an. +++ ``--password=PASSWORT`` Gibt ein Passwort für HTTP- bzw. FTP-Downloads an. }}} == Verzeichnis-Optionen == {{{#!vorlage Tabelle Option Beschreibung +++ `-P VERZEICHNIS` Erlaubt die Angabe eines Verzeichnisses, wo die heruntergeladene(n) Datei(en) gespeichert werden soll(en). +++ ``-nd``, ``--no-directories`` Falls Dateien rekursiv heruntergeladen werden, so werden sie lokal in einem Verzeichnis gespeichert. +++ ``-x``, ``--force-directories`` Das Gegenteil von ``-nd``. Es wird eine Verzeichnisstruktur erstellt. }}} == Optionen für den rekursiven Download == {{{#!vorlage Tabelle Option Beschreibung +++ ``-r``, ``--recursive`` Aktiviert den rekursiven Download von Daten. +++ ``-l TIEFE``, ``--level=`` Anzahl der Schritte TIEFE, die wget weiterverfolgen soll +++ ``-k``, ``--convert-links`` Konvertiere nach dem Download externe Links zu internen, so dass ein HTML-Dokument Offline betrachtet werden kann. +++ ``-np``, ``--no-parent`` Stellt sicher, dass nur Dateien __unterhalb__ der angegebenen Hierarchieebene heruntergeladen werden. Links zu übergeordneten Verzeichnissen werden ignoriert. +++ ``-A ACCLIST``, ``--accept ACCLIST`` Mit Kommata getrennte Liste an Datei-Erweiterungen, die heruntergeladen werden sollen. +++ ``-R REJLIST``, ``--reject REJLIST`` Mit Kommata getrennte Liste an Datei-Erweiterungen, die nicht heruntergeladen werden sollen. +++ ``-D DOMAINS``, ``--domains=DOMAINS`` Mit Kommata getrennte Liste an Domains, deren Links verfolgt werden sollen. +++ ``--exclude-domains LISTE`` Eine Liste an Domains, die nicht beachtet werden sollen. +++ ``-e robots=off`` Ignoriere die '''robots.txt''', damit alle Dateien heruntergeladen werden können. }}} == Beispiele == === Einfacher Dateidownload === Grundsätzlich kann man eine Datei mit dieser Syntax in das aktuelle Verzeichnis laden: {{{#!vorlage Befehl wget http://example.com/folder/file }}} === Bilderdownload === Will man eine Seite mit allen Bildern herunterladen, kann der Befehl so lauten: {{{#!vorlage Befehl wget -r -l 3 -np -p --user-agent="Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5" http://example.com/dir/ }}} ``-p`` gibt vor, den Inhalt der Seite herunterzuladen, wobei rekursiv (``-r``) bis zu einer Tiefe von 3 (``-l 3`` oder ``--level=3``) vorgegangen wird, übergeordnete Verzeichnisse werden ignoriert (``-np``). Außerdem gibt wget vor, als Mozilla unterwegs zu sein (``--user-agent``), da viele Seiten wget blockieren. Zudem ist es möglich nur spezielle Dateitypen zu bekommen. Bei diesem Aufruf werden rekursiv die Dokumente nach '''*.jpg''' und '''*.png''' durchsucht und abgespeichert: {{{#!vorlage Befehl wget -r -A jpg,png http://example.com/dir/ }}} Und mit diesem Befehl werden alle Dateien außer '''*.jpg''' und '''*.png''' heruntergeladen: {{{#!vorlage Befehl wget -r -R jpg,png http://example.com/dir/ }}} === Dateidownload mit Wiederholungsfunktion === Was ist, wenn die Internetverbindung abbricht? Dann kann man den Download auch auf eine begrenzte oder unbegrenzte Anzahl von Wiederholungen schalten: {{{#!vorlage Befehl wget -t X http://example.com/FOLDER/FILE }}} Das `X` steht wie für eine Zahl entsprechend der Anzahl der gewünschten Wiederholungen. `0` steht für unendlich. === Download abbrechen === Mit [[Vorlage(Tasten, Strg+C)]] kann man einen aktiven Download abbrechen. === Download fortsetzen === Hat man einen Download manuell abgebrochen oder ist er aus einem anderen Grund gescheitert, so kann man einen unvollständigen Download mit {{{#!vorlage Befehl wget -c http://example.com/FOLDER/FILE }}} fortsetzen. Nun beginnt er dort, wo er aufgehört hat. === Referer ändern === Manche Downloadserver erlauben einen Download nur, wenn der Benutzer von einer bestimmten Adresse kommt. Diese ist immer die, von der normalerweise der Download startet. wget kann diesen Wert übernehmen: {{{#!vorlage Befehl wget --referer=http://von.dieser.seite.com/me/ich http://example.com/FOLDER/FILE }}} === Geschwindigkeit begrenzen === Wenn man bei einem Download gleichzeitig noch schnell surfen will, ist es praktisch, die Downloadrate zu begrenzen. In diesem Beispiel wird sie auf 40 kB/s begrenzt: {{{#!vorlage Befehl wget --limit-rate=40000 http://example.com/FOLDER/FILE }}} === Im Hintergrund herunterladen === Bei großen Dateien bietet es sich an, den Download im Hintergrund zu starten. wget läuft dann eigenständig im Hintergrund und schreibt im Download-Verzeichnis eine log-Datei: {{{#!vorlage Befehl wget -b http://example.com/FOLEDER/FILE }}} === Websites offline speichern === Das ist sehr einfach und geht mit: {{{#!vorlage Befehl wget -r -k -E -l 8 http://example.com }}} Die Option `-r` sorgt dafür, dass rekursiv bis zu einer Tiefe von 8 (`-l 8`) vorgegangen wird, `-k` konvertiert die Links, so dass sie lokal funktionieren und `-E` erzwingt die Endung '''.html''' für alle Dateien (ist dann nützlich, wenn .'''php'''- oder .'''asp'''-Seiten geladen werden. Hinweis auf eine alternative Möglichkeit: [http://www.httrack.com/ httrack] {en} === Tarballs automatisch entpacken === Um '''.tar.gz'''-Archive direkt zu entpacken ohne sie zwischen zu speichern, kann man folgenden Befehl nutzen: {{{#!vorlage Befehl wget -q -O - http://example.com/FOLDER/FILE.tar.gz | tar xvzf - }}} Die Option ``-q`` sorgt dafür, dass keine Informationen ausgegeben werden, die ``tar`` nicht verarbeiten könnte. Mit ``-O -`` wird wget angewiesen die Datei direkt auf die Standardausgabe STDOUT zu schreiben. Mittels ``|`` wird die Standardausgabe STDOUT auf die Standardeingabe STDIN für das nächste Programm (in diesem Fall ``tar``) umgeleitet. Nun wird die Datei ganz normal entpackt, wobei ``x`` für extrahieren, ``v`` für verbose (also viele Infos ausgeben), ``z`` für dekomprimieren steht. Mit ``f -`` wird die Datei von der Standardeingabe STDIN (die in diesem Fall ja von wget kommt) gelesen. Nach diesem Befehl befinden sich nur die entpackten Dateien und Verzeichnisse, nicht jedoch die eigentliche '''.tar.gz'''-Datei im aktuellen Verzeichnis. === Zeitsteuerung von Downloads === Um Downloads zum Beispiel um 13:40 Uhr zu beginnen, hilft folgendes Skript: {{{#!code bash #!/bin/sh cd ~/Downloads echo "\033[49;1;34mFolgende Datei soll heruntergeladen werden:" echo "\033[49;1;32m" echo "$1" | awk -F / '{print $NF}' echo echo "\033[49;1;35mWann soll der Download starten? (Format: hhmmss)" echo "\033[0m" read u if [ $u = "next" ] then ps -o etime,pid --no-headers -C dl | awk '{print $1,$2}' | sort -r | awk '{print $2}' > ~/.log$$ var=`head -n 1 ~/.log$$` if [ $$ -ne $var ] then echo "Nach dem letzten Download wird dieser Download gestartet." fi while [ $$ -ne $var ] do sleep 1 ps -o etime,pid --no-headers -C dl | awk '{print $1,$2}' | sort -r | awk '{print $2}' > ~/.log$$ var=`head -n 1 ~/.log$$` done rm ~/.log$$ elif [ $u = "now" -o $u = "jetzt" -o $u = "Jetzt" ] then echo "Der Download startet jetzt!" else while [ $(date +%H%M%S) -ne $u ] do sleep 1 done fi wget -c $1 echo "Der Download ist beendet." }}} Der Name des Skripts sollte dl heißen, ansonsten muss man im Skript dl durch den Namen ersetzen. Das Skript ausführbar machen und am besten in einem Pfad speichern der in $PATH enthalten ist. Dann kann der Download wie folgt gestartet werden: {{{#!vorlage Befehl dl http://example.com/folder/file }}} Daraufhin erscheint die Frage, wann der Download starten soll. Gültige Eingaben sind ''"Jetzt"'', ''"jetzt"'', ''"now"'' für sofort starten oder `134000` für 13:40 Uhr oder `121314` für 12:13 Uhr und 14 Sekunden. Ebenfalls möglich ist ''next''. Damit startet er direkt nach den bisher gestarteten Downloads. So kann man z.B. einen Download sofort starten, und bei 5 weiteren ''next'' eingeben. Dadurch werden alle der Reihe nach abgearbeitet. = Links = * [man:wget:Manpage] {en} * [:cURL:] - wenn wget nicht mehr ausreicht * [:HTTPie:] - Alternative zu cURL und wget * [http://www.thegeekstuff.com/2009/09/the-ultimate-wget-download-guide-with-15-awesome-examples/ The Ultimate Wget Download Guide With 15 Awesome Examples] – The Geek Stuff {en} - Blogbeitrag, 09/2009 * [:Shell/Anwendungen:] {Übersicht} Übersichtsseite # tag: Shell, Internet, Download