
次のコマンドでサイトをダウンロードしようとしています:
wget -r -l 0 -p -k -m -e robots=off --restrict-file-names=nocontrol,unix http://example.com
たとえば、リンクが見つかるとhttp://example.com/direction
、ディスク上にファイルを作成します。./example.com/direction
次に、例えば、「方向」に他のファイル(リンク)が見つかったとします。http://example.com/direction/11
そして、wget
古いファイルを./example.com/direction
HTML で書き換えて、ディレクトリに変換します。そして、./example.com/direction/11
そこに新しいファイルを書き込みます。
内部に新しいファイルが見つかった場合は/direction/11
、同様に書き換えて11
ディレクトリに変換します。
つまり、ディレクトリのインデックス ファイルがすべて失われたようです。
wget 自体の問題に対する解決策はありますか?
答え1
これはすべてのケースで機能するとは限りませんが、やや予想外のタグを使用してこの問題を解決することができました。
wget 1.17.1 マニュアルより:
‘-E’
‘--adjust-extension’
‘application/xhtml+xml’
またはのファイル‘text/html’
がダウンロードされ、URL が regexp で終わらない場合、このオプションにより、ローカル ファイル名に‘\.[Hh][Tt][Mm][Ll]?’
サフィックスが追加されます。‘.html’
したがって、あなたの場合、wget はリンク を見つけるとhttp://example.com/direction
、ページが HTML 形式かどうかを確認します。そうであれば、ローカル ディスクに として保存します/example.com/direction.html
。次に を見つけるとhttp://example.com/direction/11
、 としてディスクに保存し、/example.com/direction/11
最初のファイルを上書きしません。実際のディレクトリ構造が であると仮定すると/example.com/direction/index.html
、リモート ディレクトリ構造と完全に一致しませんが、少なくともファイルを誤って上書きすることはありません。
答え2
さて、Wget だけを使用してこの問題を解決するのはほぼ不可能です。まずは問題について説明してみたいと思います。
まず Wget は をダウンロードしようとしますhttp://site.com/direction
。Wget がこのパスのリクエストを送信すると、サーバーは で使用可能なデータで応答しますhttp://site/com/example/index.html
。ただし、この時点では、Wget は送信されたデータがパス example/index.html に対応していることを認識していません。ここで、Wget が別のファイル を見つけると、http://site.com/example/11
同じことが再び発生します。ただし、最初にディレクトリ example/ を作成し、これを行うために古いファイルを無条件に削除する必要があります。私の意見では、Wget はファイルをディレクトリに置き換えているかどうかを検出し、ファイルをインデックス ファイルとして保存する必要があります。しかし、現時点ではそうではありません。