wget --mirror --html-extension --convert-links
を使用してサイトをミラーリングしていますが、post.php?id=#.html
の形式のファイル名がたくさんあることになります。これらをブラウザで表示しようとすると、ファイルの読み込み時にブラウザがクエリ文字列を無視するため、失敗します。ファイル名の?
文字を他のものに置き換える方法はありますか?
--restrict-file-names=windows
の答えは正しく機能しました。フラグ--convert-links
および--adjust-extension
/-E
(以前の名前は--html-extension
で、これも機能しますが非推奨です)と組み合わせて、期待どおりに動作するミラーを生成します。
wget --mirror --adjust-extension --convert-links --restrict-file-names=windows http://www.example
--restrict-file-names
オプションを参照してください。この特定の目的を正確に意図したものではありませんが、--restrict-file-names=windows
はおそらく次のことに役立ちます。
--restrict-file-names = modes
ローカルファイル名の生成中に、リモートURLで見つかったどの文字をエスケープする必要があるかを変更します。 [...]
「windows」を指定すると、Wgetは文字\、|、/、:、?、 "、*、<、>、および0〜31と128〜159の範囲の制御文字をエスケープします。これに加えて、WindowsモードのWgetは、:の代わりに+を使用してローカルファイル名のホストとポートを分離し、?の代わりに@を使用してファイル名のクエリ部分を残りの部分から分離します。したがって、wwwとして保存されるURL。 Unixモードではxemacs.org:4300/search.pl?input=blahは、Windowsモードではwww.xemacs.org+4300/search.pl@input=blahとして保存されます。
次のようなURLを使用すると、ブラウザで問題なく表示されます。
file:///tmp/example.com/post.php%3Fid=1.html
の代わりに
file:///tmp/example.com/post.php?id=1.html
注:ダウンロードしたファイルからの内部リンクに問題がある場合は、ダウンロードが完了する前にwgetを終了したことが原因である可能性があります。 --convert-linksと--html-extensionを指定したので(これらが指定されている場合にのみ適用されます)、wgetは通常、リンクを修正して?の代わりに%3Fを使用します。ただし、ダウンロードが完了した後、最後にこれを実行します。中断された場合、リンクは修正されず、この苦境に置かれます。もちろん、いつでもスクリプトを記述してリンクを調べて修正することができますが...