
Ich versuche, die Site mit dem folgenden Befehl herunterzuladen:
wget -r -l 0 -p -k -m -e robots=off --restrict-file-names=nocontrol,unix http://example.com
Wenn es den Link findet, z. B. http://example.com/direction
, erstellt es eine Datei auf der Festplatte./example.com/direction
Dann findet es zum Beispiel einige andere Dateien (Links) in 'Richtung', angenommenhttp://example.com/direction/11
Und wget
schreiben Sie die alte Datei ./example.com/direction
mit etwas HTML neu, transformieren Sie sie in das Verzeichnis und schreiben Sie ./example.com/direction/11
dort die neue Datei.
Wenn es darin eine neue Datei findet /direction/11
, wird es 11
diese ebenfalls neu schreiben und in das Verzeichnis konvertieren.
Also, es scheint, ich habe alle Verzeichnisindexdateien verloren.
Gibt es eine Lösung für das Problem in wget selbst?
Antwort1
Dies funktioniert möglicherweise nicht in jedem Fall, aber ich konnte dieses Problem mit einem etwas unerwarteten Tag lösen.
Aus dem wget 1.17.1-Handbuch:
‘-E’
‘--adjust-extension’
Wenn eine Datei vom Typ
‘application/xhtml+xml’
oder‘text/html’
heruntergeladen wird und die URL nicht mit dem regulären Ausdruck endet‘\.[Hh][Tt][Mm][Ll]?’
, bewirkt diese Option, dass das Suffix‘.html’
an den lokalen Dateinamen angehängt wird.
Wenn wget in Ihrem Fall den Link findet http://example.com/direction
, prüft es, ob die Seite HTML-formatiert ist. Wenn ja, wird sie auf der lokalen Festplatte als gespeichert /example.com/direction.html
. Wenn es dann sieht http://example.com/direction/11
, wird es sie auf der Festplatte als speichern /example.com/direction/11
und somit die erste Datei nicht überschreiben. Vorausgesetzt, die tatsächliche Verzeichnisstruktur ist /example.com/direction/index.html
, wird sie nicht genau mit der Remote-Verzeichnisstruktur übereinstimmen, aber zumindest werden keine Dateien fälschlicherweise überschrieben.
Antwort2
Eine Lösung dieses Problems nur mit Wget ist nahezu unmöglich. Lassen Sie mich zunächst versuchen, Ihnen das Problem zu erklären.
Zuerst versucht Wget, herunterzuladen http://site.com/direction
. Wenn Wget eine Anfrage für diesen Pfad sendet, antwortet der Server mit den in verfügbaren Daten http://site/com/example/index.html
. Zu diesem Zeitpunkt ist Wget jedoch nicht bewusst, dass die an ihn gesendeten Daten dem Pfad „example/index.html“ entsprechen. Wenn Wget nun eine andere Datei findet, http://site.com/example/11
passiert dasselbe erneut. Allerdings muss es zuerst das Verzeichnis „example/“ erstellen und löscht dazu unbedingt die alte Datei. Meiner Meinung nach sollte Wget erkennen, ob es eine Datei durch ein Verzeichnis ersetzt, und die Datei als Indexdatei speichern. Aber das tut es derzeit nicht.