かゆいとこログ

あと少しなのに届かないかゆいところに効きます

wgetで複数階層に渡るファイルをダウンロードする

wgetってなに?

wgetlinuxのコマンドで、非対話型のダウンローダーです。

最低限の使い方

例えばダウンロードしたい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を入れます(マナーですね)