強火で進め

このブログではプログラム関連の記事を中心に書いてます。

Web上にフォルダがそのまま公開されているフォルダをwgetでまとめて取得する方法

たまにこの様にフォルダがそのままでWeb上に公開されている場合があります。

この場合、1つづつDLするはメンドクサイのでwgetなどでまとめてDLすると思いますがその時の注意…など。

ここではDL先を仮にG3DライブラリのサンプルのこちらのURLとします。

http://g3d.sourceforge.net/samples/remoteRender/

ここには data-files と source の2つのディレクトリが有ります。

まず、思い付くのが -r を付けて再帰的に辿る方法。

wget -r http://g3d.sourceforge.net/samples/remoteRender/

この方法だと http://g3d.sourceforge.net/samples/geometryShader など今回必要でないファイルまでDLします。そもそもリンクをたどってそのサイトのほとんどのファイルをDLする事になります。

サーバに無用な負荷をかけますので自分が管理しているサイトでちゃんとこの挙動を認識している時以外は -r 単独で使用するのは厳禁です。

次に -np を付けて「親ディレクトリを取得対象にしない」場合はどうでしょう?
これであれば目的のディレクトリ以下のファイルやフォルダだけがDL対象となり、余計なファイルやフォルダはDLされない様に思われます。

wget -r -np http://g3d.sourceforge.net/samples/remoteRender/

結果はこちら

index.html や index.html?C=D;O=A 、 index.html?C=M;O=A など余計なファイルがDLされていますね。

これは指定されたURLに対応するディレクトリに index.html が存在しない時にApacheが自動インデックス生成の機能により生成してしまっているファイルです。詳しく説明するとApacheが生成した index.html ファイル内に以下の様なリンクが存在する為にこの様なファイルが生成される様です。

<a href="?C=M;O=A">Last modified</a>

mod_autoindex - Apache HTTP サーバ
http://httpd.apache.org/docs/2.0/ja/mod/mod_autoindex.html

これは良い感じに除外してくれるオプションが存在しないみたいなので取り敢えず、自分は -R "index.html*" で index.html やその後に変なのが付いてるファイル名の場合は除外させています。

wget -r -np -R "index.html?*" http://g3d.sourceforge.net/samples/remoteRender/

あまり、スマートな記述では無いですが自分はこんな方法でDLしています。もっとスマートなwgetの記述をご存知の方はコメント頂けると嬉しいです。