wget -k konvertiert Dateien anders auf Windows und Linux
Frage
Ich habe GNU Wget 1.10.2 für Windows und Linux und die -k Option verhält sich anders auf diesen beiden.
-k, --convert-Links machen Links in heruntergeladenen HTML Punkt auf lokale Dateien.
Ein Fenster, die es erzeugt:
www.example.com/index.html www.example.com/index.html@page=about www.example.com/index.html@page=contact www.example.com/index.html@page=sitemap
und auf Linux es produziert:
www.example.com/index.html www.example.com/index.html?page=about www.example.com/index.html?page=contact www.example.com/index.html?page=sitemap
Dies ist problematisch, in Linux, weil, wenn ich den Spiegel durch Apache dienen wird es nicht zwischen den 4 generierten Seiten seit dem Teil nach dem Questionmark (? ) unterscheidet Charakter als den Query-String an den verwendet wird, Datei.
Alle Ideen, wie ich das steuern kann?
Dank
Lösung
Sie können nicht ein Fragezeichen (?) In einem Dateinamen auf NTFS oder FAT32 verwenden. Aus diesem Grunde wget verwendet die at-Symbol (@) statt.
Unter Linux nur ein Schrägstrich (/) auf den meisten Dateisystemen verboten, so wget das Fragezeichen verwendet (da es Teil der URI).
Sie können entweder Verhalten erzwingen, indem --restrict-file-names=unix
oder --restrict-file-names=windows
verwendet wird.
Von der wget Dokumentation:
Wenn Modus auf „Unix“ eingestellt ist, Wget entkommt das Zeichen ‚/‘ und die Steuerzeichen in den Bereichen 0-31 und 128-159. Dies ist der Standard auf Unix-artige OS'es.
Wenn Modus auf „Fenster“, Wget entweicht die ‚\‘ Zeichen ‚|‘, ‚/‘, ‚:‘ ‚?‘, ‚",‘,‚*‘,‚<‘,‚>‘, Und die Steuerzeichen in den Bereichen 0-31 und 128-159. Zusätzlich zu dieser, Wget in Windows verwendet Modus ‚+‘ statt ‚:‘ Host und Port in lokalen trennen Dateinamen und verwendet ‚@‘ statt ‚?‘, Um den Abfrageteil trennen von der Dateiname aus der Ruhe. Daher ist eine URL, die gespeichert werden würde wie ‚
www.xemacs.org:4300/search.pl?input=blah
‘ in Unix würde Modus gespeichert werden ‚www.xemacs.org+4300/search.pl@input=blah
‘ in Windows-Modus. Dieser Modus ist die Standard unter Windows.
Andere Tipps
Dies ist problematisch, in Linux, weil, wenn ich den Spiegel durch Apache dienen wird es nicht, da der Teil nach dem Question zwischen den 4 generierten Seiten unterscheiden (?) Zeichen in die Datei als das Query-String verwendet werden.
Um ein Fragezeichen in einem URL-Pfad Teil gehören, können Sie es entkommen:
www.example.com/index.html%3Fpage=about
- convert-Links sollten dies für Sie tun, würde ich denken -. Kann ein Fehler, wenn nicht
finden Sie unter --restrict-file-names=windows
Dies ist problematisch, in Linux, weil, wenn ich den Spiegel dienen, durch Apache es wird nicht zwischen den 4 generierten Seiten, da die Unterscheidung Teil nach dem Questionmark (?) Zeichen wird als das Query-String verwendet in die Datei.
Wenn es bereits zu spät in diesem sed Befehl mir geholfen:
find . -type f -name "*html*" -exec sed -i -r 's/(src|href)=(["\x27])(.*?)(\?)(.*?)\2/\1=\2\3%3F\5\2/g' {} +
Es ersetzt? in href = oder src = Schlüssel% 3F. (\ X27 ist die einzige Zecke)