Escape-Abfragezeichenfolgen mit wget --mirror

15

Ich benutze, wget --mirror --html-extension --convert-linksum eine Site zu spiegeln, aber am Ende habe ich viele Dateinamen im Format post.php?id=#.html. Wenn ich versuche, diese in einem Browser anzuzeigen, schlägt dies fehl, da der Browser die Abfragezeichenfolge beim Laden der Datei ignoriert. Gibt es eine Möglichkeit, das ?Zeichen in den Dateinamen durch etwas anderes zu ersetzen ?


Die Antwort von --restrict-file-names=windowshat korrekt funktioniert. In Verbindung mit den Flags --convert-linksund --adjust-extension/ -E(früher benannt --html-extension, was ebenfalls funktioniert, aber veraltet ist) wird ein Spiegel erzeugt, der sich wie erwartet verhält.

wget  --mirror --adjust-extension --convert-links --restrict-file-names=windows http://www.example
Jeremy Banks
quelle

Antworten:

16

Siehe die --restrict-file-namesOption. Auch --restrict-file-names=windowswenn es nicht genau für diesen speziellen Zweck vorgesehen ist, wird es Ihnen wahrscheinlich helfen:

--restrict-file-names = modes

Ändern Sie, welche Zeichen in fernen URLs bei der Generierung lokaler Dateinamen maskiert werden müssen. [...]

Wenn "windows" angegeben ist, werden die Zeichen \, |, /,:,?, ", *, <,> Und die Steuerzeichen in den Bereichen 0 bis 31 und 128 bis 159 von Wget ignoriert , Wget verwendet im Windows-Modus + anstelle von:, um Host und Port in lokalen Dateinamen zu trennen, und @ anstelle von?, Um den Abfrageteil des Dateinamens vom Rest zu trennen. Daher eine URL, die als www gespeichert wird. xemacs.org:4300/search.pl?input=blah im Unix-Modus wird im Windows-Modus unter www.xemacs.org+4300/search.pl@input=blah gespeichert.

peth
quelle
2

Ihr Browser zeigt es gut an, wenn Sie eine URL wie verwenden

file:///tmp/example.com/post.php%3Fid=1.html

Anstatt von

file:///tmp/example.com/post.php?id=1.html

Hinweis: Wenn Sie Probleme mit internen Links von heruntergeladenen Dateien haben, liegt dies daran, dass Sie wget vor dem Herunterladen beendet haben. Da Sie --convert-links und --html-extension angegeben haben (gilt nur, wenn diese angegeben sind), würde wget normalerweise die Links reparieren, um% 3F anstelle von? Zu verwenden. Dies geschieht jedoch am Ende, nachdem der Download abgeschlossen ist. Wenn es unterbrochen wurde, hat es keine der Links repariert, und Sie befinden sich in dieser schwierigen Situation. Natürlich können Sie jederzeit ein Skript schreiben, um die Links zu reparieren, aber ...

Micah Cowan
quelle
Dies ist nicht ganz richtig, da eine URL wie http://site.com/article.cgi?25in article.cgi?25.htmlAbschnitt 2.7 unter gnu.org/software/wget/manual/wget.html#HTTP-Options
Tzury Bar Yochay
-2

wget hat keine Möglichkeit, den gespeicherten Namen zu ändern. Was Sie wahrscheinlich tun müssen, ist ein Skript zu erstellen, um es zu durchlaufen und zu ersetzen? mit _ oder so ähnlich. Wget allein kann das nicht.

8BitsOfGeek
quelle