Spiegelbildlich

FTP-Downloads und Website-Spiegelung mit Wget

01.11.2005 Wget ist ein FTP-Tool, das nicht nur einzelne Dateien, sondern auf Wunsch gleich komplette Websites herunterlädt. Auch eine unzuverlässige Internet-Verbindung stört das Tool nicht: Beschränken Sie einfach Bandbreite oder Download-Menge und setzen Sie abgebrochene Übertragungen fort.

Es gibt zahlreiche grafische Download-Manager, mit denen Sie nicht nur einzelne Dateien herunterladen, sondern komplette Websites spiegeln. Auf der Kommandozeile erledigt Wget diesen Job – schnell und ohne viele Mausklicks. Wget "spricht" HTTP, HTTPS und FTP, knüpft an abgebrochene Übertragungen wieder an und bringt sogar eine Update-Funktion mit, die nur veraltete Dateien aktualisiert.

Rundumschlag

Die allgemeine Syntax des Kommandos lautet:

wget URL

Wget verrät Ihnen dabei direkt auf der Konsole, was es erledigt (Abbildung 1): Im Beispiel baut das Programm eine Verbindung zum Webserver auf (Standard-Port 80) und lädt die Datei index.html ins lokale Verzeichnis herunter; eingebettete Bilder ignoriert es dabei, und es verfolgt auch keine Links. Wer die mitunter recht langen Ausgaben im Terminal nicht sehen mag, gibt als weiteren Parameter -q ("quiet", deutsch: "ruhig") an. Da Wget jetzt aber auch eventuelle Fehlermeldungen und grundlegende Informationen unterdrückt, gehen Sie am besten mit wget -nv einen Kompromiss ein: Das Programm schreibt nicht ganz so viel ins Terminal, schweigt sich aber auch nicht vollkommen aus.

Abbildung 1: Wget bei der Arbeit: Der einfache Aufruf erfasst keine eingebetteten Bilder und verfolgt keine Links.

Um Wget mitzuteilen, dass es "lokalen" Links auf dem Server folgen und die Daten rekursiv spiegeln soll, geben Sie als zusätzlichen Parameter -r an. Es ist sinnvoll, in diesem Zusammenhang auch direkt den die Rekursionstiefe mit anzugeben: Um neben index.html alle dort eingebetteten Links (wie z. B. Bilder oder weitere HTML-Seiten) zu erwischen, gehen Sie einen Level tiefer:

wget -r -l 1 www.linux-user.de

Geben Sie als Level-Tiefe -l 2 an, folgt Wget den eingebetteten Verknüpfungen noch eine Stufe weiter: Befindet sich in index.html ein Link auf bilder.html, geht der Download-Manager nun auch Verknüpfungen in dieser Seite nach.

Auf der eigenen Festplatte sehen Sie anschließend für jede URL einen eigenen Ordner. Dieses Verhalten deaktivieren Sie auf Wunsch durch Anhängen einer Option: Geben Sie zusätzlich -nH ("no host") an, landet alles im aktuellen Verzeichnis.

Wget passt auf Wunsch die Links in den einzelnen HTML-Dateien an. Geben Sie als zusätzliche Option -k an, kümmert sich Wget um Verweise auf Bilder, Stylesheets, andere HTML-Seiten vom gleichen Server usw. (Listing 1). Verknüpfungen zu Dateien, die Wget ebenfalls heruntergeladen hat, werden über einen relativen Pfad referenziert; Dateien, die nicht mit auf die Platte gewandert sind, behalten ihre vollständigen URLs.

Listing 1

Wget-Beispielaufruf

$ wget -r -l 2 www.url.de
Geholt: 46,676 Bytes in 7 Dateien
Umwandlung von »www.url.de/index.html«… 11-0
Umwandlung von »www.url.de/about_me.html«… kein Download notwendig.
Umwandlung von »www.url.de/publications/index.php«… 3-8
Umwandlung von »www.url.de/picture_archive/index.php«… 3-49
Umwandlung von »www.url.de/linux.html«… kein Download notwendig.
5 Dateien in 0.00 Sekunden konvertiert.

Keine Panik!

Auch wenn ein Download großer Datenmengen einmal abgebrochen ist, ist das kein Grund zur Panik, und Sie müssen nicht wieder von vorne starten. Wget bringt für diese Zwecke die Option -c ("continue", deutsch: fortsetzen) mit, welche an vorherige Downloads anknüpft. Dabei spielt es keine Rolle, ob Sie die Daten mit Wget oder einem grafischen Download-Manager heruntergeladen haben – das Tool vergleicht die Fragmente mit dem Original und setzt die Arbeit fort. Wget gibt sich auch hier informativ und meldet beispielsweise:

Download der Datei schon vollständig; kein Download notwendig.

Sichern Sie immer wieder dieselben Daten, bietet sich der Einsatz der Option -N an: Dann vergleicht Wget für jede Datei die Größe und das Datum mit der lokalen Kopie:

$ wget -N ftp://ftp.debian.de/debian-cd/3.1_r0a/i386/iso-cd/debian-31r0a-i386-binary-1.iso
…
Größen stimmen nicht überein (lokal 7935840) – erneuter Download.

Hat sich nichts geändert, informiert der Download Manager z. B.:

Datei auf dem Server nicht neuer als die lokale Datei »index.html« – kein Download.

Vergessen Sie die Option einmal, ist das allerdings kein Grund zur Sorge: Normalerweise überschreibt Wget keine Dateien, sondern legt zur Sicherheit durchnummerierte Backups (index.html.1, index.html.2 usw.) an.

Ganz speziell

Wer nur Dateien eines ganz bestimmten Typs herunterladen möchte und diesen im Aufruf beispielsweise mit der Wildcard * angibt, erhält lediglich eine Fehlermeldung:

wget www.linux-user.de/*.jpg
…
HTTP Anforderung gesendet, warte auf Antwort… 404 Not Found
20:53:46 FEHLER 404: Not Found.

Stattdessen geben Sie den Dateityp oder eine Liste von Dateitypen hinter der Option -A an, z. B.:

wget -r -l 1 -A jpg,png,gif …

Wer die Ausgabe genau beobachtet, stellt fest, dass Wget zunächst auch die Datei index.html herunterlädt, diese aber anschließend wieder entfernt, so dass wirklich nur die Bilder übrigbleiben.

Das Ganze funktioniert auch in die andere Richtung, wenn Sie mit dem Parameter -R gezielt Dateitypen zurückweisen. Auch hier geben Sie nach der Option eine Liste von Dateien an, die keinesfalls auf der eigenen Platte landen sollen. So sorgt der Aufruf

wget -R avi,mpg,wmv …

dafür, dass Speicherfresser draußen bleiben.

Auf Sparflamme

Es gibt mehrere Möglichkeiten, Wget in seiner Arbeit einzuschränken. Besitzen Sie beispielsweise eine langsame Internetverbindung und wollen nicht die gesamte Bandbreite für den Download verwenden, reduzieren Sie diese mit der Option --limit-rate=. Dabei legen Sie fest, wie viele KByte pro Sekunde zur Verfügung stehen, z. B.:

wget --limit-rate=20k …

Der Parameter auch Angaben in MByte, für 10 MByte/s tippen Sie beispielsweise:

wget --limit-rate=10m …

Wollen Sie hingegen die Gesamtgröße des Download-Volumens begrenzen, setzen Sie -Q ein. Als weitere Information erwartet die Option eine Angabe zur Größe der Datenmenge, die Sie wahlweise in Byte, KByte oder MByte spezifizieren. So sorgt der Aufruf

wget -Q40m

beispielsweise dafür, dass nach 40 MByte Schluss ist.

Alles automatisch

Wer sich die ganzen Parameter für Wget nicht merken kann oder will, kann über eine versteckte Konfigurationsdatei im eigenen Home-Verzeichnis einige Voreinstellungen festlegen. Dazu kopieren Sie die systemweite Vorlage /etc/wgetrc in Ihr eigenes Home-Verzeichnis

cp /etc/wgetrc ~/.wgetrc

und passen diese anschließend mit einem Text-Editor an. Für sämtliche Kommandozeilenoptionen finden Sie hier entsprechende Einträge, die dort aber durch ein führendes Rautezeichen als Kommentare gekennzeichenet sind. Um beispielsweise den Parameter -N zur Vorgabe zu machen, entfernen Sie das #-Zeichen vor

#timestamping = off

und ersetzen off durch on. Abbildung 2 zeigt eine beispielhafte Konfigurationsdatei für Wget im Text-Editor KWrite.

Abbildung 2: So könnte Ihre eigene "~/.wgetrc" aussehen; die Rautezeichen sind Kommentare.

Sicherer Download

Wget spiegelt auch Daten von Servern, bei denen Sie sich mit Benutzername und Passwort authentifizieren müssen. Dazu geben Sie dem Programm beide Informationen beim Start mit auf den Weg:

wget --http-user=Benutzername
 --http-passwd=Passwort

Vorsicht allerdings vor den neugierigen Blicken anderer User: Schaut ein anderer Benutzer mit dem ps-Kommando nach allen Prozessen, die auf dem Rechner laufen, taucht der Wget-Befehl mit Benutzernamen und Passwort im Klartext auf. Ein Workaround führt über die Konfigurationsdatei ~/.wgetrc im eigenen Home-Verzeichnis. Tragen Sie hier beispielsweise

http_user = Benutzername

http_passwd = Passwort

ein und machen Sie die Datei mit

chmod 600 ~/.wgetrc

für neugierige Augen unlesbar.

Perfekt kombiniert

Wget ist nicht-interaktiv, d. h. erwartet keine Angaben des Benutzers, sondern verrichtet zuverlässig im Hintergrund seine Arbeit. Das ist ein echter Vorteil, wenn Sie es auf entfernten Rechnern einsetzen, die Sie nur über eine SSH-Sitzung steuern. Dazu bauen Sie zunächst die SSH-Verbindung auf und starten dann das Programm Screen [1], indem Sie am Prompt

screen

eingeben. Starten Sie den Download über das passende Wget-Kommando und verlassen Sie den Screen danach über [Strg-A],[D]. Sie können sich dann abmelden, denn gestartete Prozesse laufen im Screen weiter. Wenn Sie sich das nächste Mal am entfernten Rechner anmelden, tippen Sie einfach

screen -r

um die Screen-Session wiederzubeleben. Jetzt können Sie Wgets Arbeit kontrollieren, eventuell abgebrochene Downloads wieder aufnehmen usw.

Glossar

Pfad

Dateien und Verzeichnisse sind hierarchisch in einer Art Baumstruktur aufgebaut und lassen sich absolut oder relativ ansprechen. Als absolut bezeichnet man dabei den Weg, der vom Wurzelverzeichnis (/) ausgehend alle "zu betretenden" Verzeichnisse nennt, also z. B. /home/huhn/linux-user/inhalt.txt. Einen relativen Pfad hingegen beginnen Sie immer im aktuellen Verzeichnis. Das übergeordnete Verzeichnis sprechen Sie dabei über zwei Punkte an, also erreichen Sie z. B. /etc vom eigenen Home-Verzeichnis aus über den relativen Pfad ../../etc.

Wildcard

Sonderzeichen, die Teile von Zeichenketten unbestimmt lassen. Ein Fragezeichen steht für einen beliebigen Buchstaben (z. B. passt h?llo auf die Dateien hallo, hGllo, h7llo, …), während das Sternchen für beliebig viele verschiedene Zeichen steht (z. B. passt G*ss auf Guss, Genuss usw.).

Infos

[1] Screen-Artikel: Heike Jurzik, "Fensterzauber", LinuxUser 09/2004, S. 76 ff.

Einem Freund empfehlen    Druckansicht beenden Bookmark and Share
Kommentare