wgetで複数階層に渡るファイルをダウンロードする
wgetってなに?
wgetはlinuxのコマンドで、非対話型のダウンローダーです。
最低限の使い方
例えばダウンロードしたいzipファイルが http://hostname/hoge.zip にある場合、
$ wget http://hostname/hoge.zip
とすることで、ローカルにhoge.zipが保存されます。
必要十分(?)な使い方
サイト上にファイル一覧のダウンロードリンクがおいてある場合、
例えば、 http://hostname/directory1/ 内にダウンロードリンクがおいてある場合、
$ wget http://hostname/directory1/
としてしまうと、index.htmlがDLされるだけで終わってしまいます。
$ wget http://hostname/directory1/file0.zip
などとすればDLできますが、ダウンロードリンクが大量にある場合はこんなことやっていられません。
ここで、wgetのオプションを使って以下のようにDLします
$ wget -rH -l 1 -A txt,zip --random-wait http://hostname/directory1/
各オプションについて:
- -r: 再帰的にDLします。このとき,wgetは兄弟ディレクトリの中身まですべてDLしてしまうことがあるようです。(これを防ぐためにlオプションをつけています。)
- -l: 再帰的にDLする最大深さを指定します.
- -H: 異なるドメインのファイルはダウンロードしません。(lオプションを1にしていれば関係ないかと思われますが)
-A: ダウンロードするファイルを限定します。カンマ区切りで拡張子を指定できるほか、ダブルクオートで囲めば、正規表現でファイルを絞ることもできます。
--random-wait: これは必須ではありませんが、ファイルをDLするためにあまりに大量のリクエストを投げてしまうと相手サーバーに負荷がかかり、攻撃してるみたいになるので、ランダムにwaitを入れます(マナーですね)