web-dev-qa-db-ja.com

wget--mirrorを使用したクエリ文字列のエスケープ

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
15
Jeremy Banks

--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として保存されます。

16
peth

次のような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を使用します。ただし、ダウンロードが完了した後、最後にこれを実行します。中断された場合、リンクは修正されず、この苦境に置かれます。もちろん、いつでもスクリプトを記述してリンクを調べて修正することができますが...

2
Micah Cowan