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


15

私はwget --mirror --html-extension --convert-linksサイトをミラーリングするために使用していますが、最終的にはの形式で多くのファイル名になりますpost.php?id=#.html。ブラウザでこれらを表示しようとすると、ファイルをロードするときにブラウザがクエリ文字列を無視するため失敗します。?ファイル名の文字を別のものに置き換える方法はありますか?


の答えは--restrict-file-names=windows正しく働きました。flags --convert-linksおよび--adjust-extension/ -E(以前は名前が付けられていましたが--html-extension、これは機能しますが、推奨されません)と組み合わせて、期待どおりに動作するミラーを生成します。

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

回答:


16

--restrict-file-namesオプションを参照してください。この特定の目的のために正確に意図されていません--restrict-file-names=windowsが、おそらくあなたに沿ってあなたを助けるでしょう:

--restrict-file-names = modes

ローカルURLの生成中に、リモートURLで見つかったどの文字をエスケープする必要があるかを変更します。[...]

「windows」が指定されている場合、Wgetは、文字\、|、/、:、?、 "、*、<、>、および範囲0〜31および128〜159の制御文字をエスケープします。これに加えて、WindowsモードのWgetでは、ローカルファイル名のホストとポートを分離するために:の代わりに+を使用し、ファイル名のクエリ部分を残りの部分から分離するために?の代わりに@を使用します。 Unixモードではxemacs.org:4300/search.pl?input=blahはWindowsモードではwww.xemacs.org+4300/search.pl@input=blahとして保存されます。


2

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


これは、のようなURLのため、中断することなく、wgetのかなり正しくないhttp://site.com/article.cgi?25として保存されますarticle.cgi?25.htmlで参照してくださいセクション2.7 gnu.org/software/wget/manual/wget.html#HTTP-Options
TzuryバーYochay

-2

wgetには、保存された名前を変更するオプションがありません。おそらく必要なことは、実行して置き換えるスクリプトを作成することですか?_または同様のもの。Wgetだけではこれを行うことはできません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.