ウェブファイルダウンロードの定番!wget コマンドの使い方 詳細解説
インターネット上からファイルを取得したいとき、皆さんはどのようにしていますか?ウェブブラウザでリンクをクリックしたり、ダウンロードボタンを押したりするのが一般的でしょう。しかし、もっと柔軟に、もっと強力に、そしてもっと自動的にファイルをダウンロードしたい場合、コマンドラインツールが非常に役立ちます。その中でも特に有名で、多くの環境で利用できるのが wget
コマンドです。
wget
は、非対話型のコマンドラインダウンローダーです。つまり、ユーザーの操作を必要とせず、スクリプトやシェルから呼び出して実行するのに適しています。単純なファイルのダウンロードから、ウェブサイト全体のミラーリング、中断されたダウンロードの再開、パスワード保護されたサイトからの取得まで、様々な用途で活躍します。
この記事では、ウェブファイルダウンロードの定番ツールである wget
コマンドについて、その基本的な使い方から高度なオプション、そして様々な応用例まで、詳細かつ網羅的に解説していきます。約5000語というボリュームで、wget
の強力さを余すところなくお伝えします。
1. wget とは? なぜ使うのか?
1.1. wget の概要
wget
(GNU Wget) は、GNUプロジェクトの一部として開発されている、フリーでオープンソースのソフトウェアです。その主な目的は、HTTP、HTTPS、FTP といったプロトコルを使用して、ウェブサーバーやFTPサーバーからファイルをダウンロードすることです。
最も重要な特徴は「非対話型」であることです。これにより、以下のようなことが可能になります。
- 自動化: スクリプトに組み込んで、定期的にファイルをダウンロードする。
- バックグラウンド実行: ログインセッションが終了した後もダウンロードを続ける。
- バッチ処理: 複数のファイルをまとめてダウンロードする。
- 中断・再開: 通信が切断されても、途中からダウンロードを再開する。
- 再帰的ダウンロード: ウェブサイト全体の構造を辿ってファイルをまとめてダウンロードする(ウェブサイトのミラーリングなど)。
1.2. なぜ wget を使うのか?
ウェブブラウザでもダウンロードはできますが、wget
を使うことには多くの利点があります。
- コマンドラインからの操作: サーバー上で直接作業する場合や、GUIがない環境で便利です。自動化やスクリプト化が容易になります。
- 高い信頼性: ネットワークの問題(一時的な切断など)が発生しても、自動的にリトライを試みたり、中断されたダウンロードを再開したりする機能が組み込まれています。
- 豊富なオプション: ファイル名、保存場所、ダウンロード速度制限、ユーザー認証、プロキシ設定、ユーザーエージェントの偽装、特定の種類のファイルのみダウンロード、リンクを辿って再帰的にダウンロードするなど、非常に多くのオプションがあります。これにより、ダウンロードプロセスを細かく制御できます。
- 軽量: グラフィカルなインターフェースを持たないため、リソース消費が少なく、サーバーなどの限られた環境でも効率的に動作します。
- クロスプラットフォーム: Linux、macOS、Windows (Cygwin, WSL, Chocolateyなどを通じて) など、多くのOSで利用可能です。
ブラウザでのダウンロードは手動での単一ファイル取得には便利ですが、多数のファイル、複雑な条件でのダウンロード、定期的な自動ダウンロードといったシナリオでは、wget
の方が圧倒的に強力で効率的です。
2. wget のインストール方法
ほとんどのLinuxディストリビューションやmacOSでは、wget
はデフォルトでインストールされているか、パッケージマネージャーを使って簡単にインストールできます。
2.1. Linux
主要なLinuxディストリビューションでのインストールコマンドです。
- Debian / Ubuntu:
bash
sudo apt update
sudo apt install wget - Fedora / CentOS / RHEL:
bash
sudo dnf install wget # Fedora 22以降
# または
sudo yum install wget # CentOS/RHEL 7以前 - Arch Linux:
bash
sudo pacman -S wget
2.2. macOS
macOSでは、Homebrewというパッケージマネージャーを使うのが最も簡単です。
まずHomebrewがインストールされていることを確認します。インストールされていない場合は、Homebrewの公式サイトの指示に従ってインストールしてください。
Homebrewがインストールされていれば、以下のコマンドで wget
をインストールできます。
bash
brew install wget
2.3. Windows
Windowsには標準では wget
コマンドは含まれていませんが、いくつか方法があります。
- Cygwin: Linux環境をエミュレートするCygwinをインストールする際に、
wget
パッケージを選択してインストールできます。 - WSL (Windows Subsystem for Linux): WSLをインストールし、その上でLinuxディストリビューション(Ubuntuなど)をセットアップすれば、上記Linuxのインストール方法で
wget
を利用できます。これが最も推奨される方法の一つです。 - Chocolatey: Windows向けのパッケージマネージャーであるChocolateyを使っている場合、コマンドプロンプトまたはPowerShellで以下のコマンドを実行できます。
powershell
choco install wget - バイナリのダウンロード: 非公式ですが、
wget
のWindows用バイナリがインターネット上で配布されている場合があります。信頼できるソースからダウンロードし、PATH環境変数にディレクトリを追加する必要があります。
インストールが完了したら、ターミナルまたはコマンドプロンプトを開き、wget --version
と入力してバージョン情報が表示されるか確認してみましょう。
bash
wget --version
これにより、wget
が正しくインストールされ、実行できる状態になっていることが確認できます。
3. wget の基本的な使い方
wget
の最も基本的な使い方は、ダウンロードしたいファイルのURLを指定するだけです。
bash
wget [URL]
3.1. 単一ファイルのダウンロード
例えば、特定のファイルをダウンロードしたい場合は、そのファイルの直リンクURLを指定します。
bash
wget https://example.com/path/to/somefile.zip
このコマンドを実行すると、example.com
から somefile.zip
というファイルがダウンロードされ、コマンドを実行したカレントディレクトリに保存されます。ダウンロードの進捗状況(ダウンロード済みサイズ、速度、残り時間など)がターミナルに表示されます。
3.2. 複数のファイルをまとめてダウンロード
複数のファイルをダウンロードしたい場合は、URLをスペースで区切って複数指定します。
bash
wget https://example.com/file1.pdf https://example.com/file2.pdf https://example.com/file3.pdf
wget
は指定されたURLを順番にダウンロードしていきます。
3.3. 保存するファイル名を指定する (-O)
デフォルトでは、ダウンロードしたファイルはURLのファイル名(例: somefile.zip
)で保存されます。別の名前で保存したい場合は、-O
(大文字オー) オプションを使います。
bash
wget -O newfilename.zip https://example.com/path/to/somefile.zip
このコマンドは somefile.zip
をダウンロードしますが、カレントディレクトリには newfilename.zip
という名前で保存します。
注意: -O
オプションは、一つのファイルを特定のファイル名で保存する場合に使用します。複数のファイルを指定して -O
を使うと、すべてのファイルが同じファイル名で上書きされてしまうため、通常は避けるべきです。複数のファイルをダウンロードしてそれぞれに異なる名前を付けたい場合は、ダウンロード後にmvコマンドなどでリネームするか、後述する -i
オプションと組み合わせるなどの工夫が必要です。
3.4. 保存するディレクトリを指定する (-P)
ダウンロードしたファイルをカレントディレクトリではなく、特定のディレクトリに保存したい場合は、-P
(大文字ピー) オプションを使います。
bash
wget -P /path/to/save/directory https://example.com/path/to/somefile.zip
指定したディレクトリが存在しない場合は、wget
が自動的に作成します。
bash
wget -P ./downloads https://example.com/file1.pdf
wget -P /tmp/wget_files https://example.com/file2.pdf
このコマンドは、カレントディレクトリ内の downloads
というディレクトリに file1.pdf
をダウンロードし、/tmp/wget_files
というディレクトリに file2.pdf
をダウンロードします。
3.5. ダウンロードの進捗表示を抑制する (-q)
wget
はデフォルトでダウンロードの進捗状況を詳細に表示しますが、これを抑制して、エラーメッセージなど最小限の情報のみを表示させたい場合は、-q
(quiet) オプションを使います。
bash
wget -q https://example.com/largefile.tar.gz
これは、スクリプトの中でダウンロードを実行する場合や、多数の小さなファイルを一括でダウンロードする場合に便利です。
3.6. ダウンロードのログをファイルに保存する (-o, -a)
ダウンロードの過程で表示されるメッセージ(進捗状況、エラー、警告など)をファイルに保存したい場合があります。
-o <logfile>
: ログを指定したファイルに書き込みます。ファイルが既に存在する場合、内容は上書きされます。-a <logfile>
: ログを指定したファイルに追記します。複数のwget
実行結果を一つのファイルにまとめたい場合に便利です。
“`bash
ログを logfile.txt に書き込む (上書き)
wget -o logfile.txt https://example.com/file1.txt
ログを download_history.log に追記する
wget -a download_history.log https://example.com/file2.txt
“`
これは、長時間のダウンロードや、バッチ処理で多数のファイルをダウンロードする場合に、後からダウンロード結果を確認するのに役立ちます。
4. wget の主要なオプション詳細
wget
は非常に多くのオプションを持っています。ここでは、よく使われる主要なオプションについて、その目的、書式、詳細な説明、そして具体的な使用例を交えて解説します。
4.1. ダウンロードの制御と再開
-c
(continue)
- 目的: 中断されたダウンロードを途中から再開する。
- 書式:
wget -c [URL]
- 説明: 以前に同じURLからダウンロードを開始し、途中で中断された場合、
-c
オプションを使うと、サーバーがレンジリクエスト(Range request)に対応していれば、ファイルの残りの部分だけをダウンロードして既存のファイルに追記します。これにより、最初からダウンロードし直す必要がなくなり、時間と帯域幅を節約できます。すでに完全にダウンロードされているファイルに対して-c
を使うと、通常は何もせず終了します。 - 使用例:
bash
# ダウンロード中にCtrl+Cなどで中断された場合
wget -c https://example.com/very_large_file.iso
注意: サーバーがレンジリクエストに対応していない場合や、ダウンロード中にファイルの内容が変更された場合は、正しく動作しないことがあります。
--tries=<number>
- 目的: ネットワークエラーなどでダウンロードに失敗した場合の最大リトライ回数を指定する。
- 書式:
wget --tries=<number> [URL]
- 説明: デフォルトでは、
wget
はダウンロード失敗時に数回リトライを試みます。このオプションを使うと、その最大回数を明示的に指定できます。<number>
に0
を指定すると、無限にリトライを試みます。 -
使用例:
“`bash
# 最大10回リトライする
wget –tries=10 https://example.com/sometimes_unavailable_file.dat無限にリトライする (ファイルが利用可能になるまで待ちたい場合など)
wget –tries=0 https://example.com/wait_for_file.txt
“`
--wait=<seconds>
- 目的: リトライ間の待機時間を指定する。
- 書式:
wget --wait=<seconds> [URL(s)]
- 説明: ダウンロードが失敗したり、複数のファイルをダウンロードしたりする際に、次のリクエストを送信するまでに指定した秒数だけ待機します。これは、サーバーに連続して負荷をかけすぎるのを防ぐために重要です。
- 使用例:
bash
# 各ダウンロードまたはリトライの間に5秒待機する
wget --wait=5 https://example.com/file1.txt https://example.com/file2.txt
--waitretry=<seconds>
- 目的: リトライ時の待機時間を指定する(エラーが発生した場合のみ)。
- 書式:
wget --waitretry=<seconds> [URL]
- 説明:
--wait
と似ていますが、--waitretry
はリトライが必要なエラーが発生した場合にのみ待機時間を適用します。ダウンロードが正常に完了した場合は、次のダウンロードはすぐに開始されます(複数のURLを指定している場合)。待機時間は、リトライ回数に応じて指数関数的に増加させる設定も可能です(デフォルトでは最大60秒まで指数バックオフを行います)。 - 使用例:
bash
# エラー発生時、リトライ前に最大10秒待機する
wget --waitretry=10 https://example.com/error_prone_file.zip
--limit-rate=<speed>
- 目的: ダウンロード速度を制限する。
- 書式:
wget --limit-rate=<speed> [URL(s)]
- 説明: ダウンロード速度を特定の値に制限します。
<speed>
はバイト数で指定し、K(キロバイト)、M(メガバイト)を付けて指定できます。例えば、100k
は100KB/s、2m
は2MB/sです。これは、ネットワーク帯域幅を使い切らないようにしたり、他のネットワーク利用者に影響を与えないようにしたりする場合に便利です。 -
使用例:
“`bash
# ダウンロード速度を500KB/sに制限する
wget –limit-rate=500k https://example.com/large_document.pdfダウンロード速度を2MB/sに制限する
wget –limit-rate=2m https://example.com/software_installer.exe
“`
4.2. 入出力とファイル名
-O <file>
(大文字オー)
- 目的: ダウンロードしたファイルを指定したファイル名で保存する。
- 書式:
wget -O <file> [URL]
- 説明: 「3.3. 保存するファイル名を指定する」で説明済みですが、非常に重要なので再度記載します。単一のファイルをダウンロードし、それを指定した
<file>
という名前で保存します。標準出力 (-O -
) に出力することも可能です。 -
使用例:
“`bash
# index.html を download.html という名前で保存
wget -O download.html https://example.com/index.htmlファイルの内容を標準出力に表示
wget -O – https://example.com/api/data.json
“`
-P <directory>
(大文字ピー)
- 目的: ダウンロードしたファイルを指定したディレクトリに保存する。
- 書式:
wget -P <directory> [URL(s)]
- 説明: 「3.4. 保存するディレクトリを指定する」で説明済みです。指定したディレクトリが存在しない場合は自動的に作成されます。複数のファイルをダウンロードする場合、すべてのファイルがそのディレクトリに保存されます。
- 使用例:
bash
# ダウンロードしたファイルを /tmp/downloads ディレクトリに保存
wget -P /tmp/downloads https://example.com/file.txt
--content-disposition
- 目的: サーバーの
Content-Disposition
ヘッダーで指定されたファイル名を使用する。 - 書式:
wget --content-disposition [URL]
- 説明: サーバーによっては、ダウンロードされるファイル名がURLの末尾と異なる場合があります(例:
/download?id=123
というURLでreport.csv
というファイルをダウンロードさせる場合)。Content-Disposition: attachment; filename="report.csv"
のようなヘッダーが付与されている場合、このオプションを使うと、ヘッダーで指定されたファイル名 (report.csv
) で保存されます。 - 使用例:
bash
# Content-Disposition ヘッダーで指定されたファイル名で保存
wget --content-disposition https://example.com/download?id=456
--trust-server-names
- 目的: リダイレクト後のURLのファイル名を使用する。
- 書式:
wget --trust-server-names [URL]
- 説明: 元のURLからリダイレクトされた場合、デフォルトでは元のURLのファイル名部分を使用しようとしますが、このオプションを使うとリダイレクト後のURLのファイル名を使用します。
--content-disposition
がサーバーヘッダーを参照するのに対し、こちらはリダイレクト先のURL構造を参照します。 - 使用例:
bash
# リダイレクト先のURLのファイル名で保存
wget --trust-server-names https://example.com/short_link_to_file
4.3. 認証とアクセス制御
--user=<user>
, --password=<password>
- 目的: HTTP または FTP 認証が必要なサイトにログインするためのユーザー名とパスワードを指定する。
- 書式:
wget --user=<user> --password=<password> [URL]
- 説明: Basic認証やDigest認証などの認証が必要なリソースにアクセスする際に使用します。
- 使用例:
bash
# ユーザー名 "myuser", パスワード "mypass" で認証を行う
wget --user=myuser --password=mypass https://example.com/private/document.pdf
注意: パスワードをコマンドラインで直接指定するのはセキュリティリスクがあります。スクリプトなどで使う場合は、環境変数を利用するなどの対策を検討してください。
--http-user=<user>
, --http-password=<password>
--ftp-user=<user>
, --ftp-password=<password>
- 目的: それぞれHTTPまたはFTPの認証情報のみを指定する。
- 書式:
wget --http-user=<user> --http-password=<password> [URL]
- 説明:
--user
/--password
は両方のプロトコルに適用されますが、これらは特定のプロトコルに限定して認証情報を指定できます。 -
使用例:
“`bash
# HTTP認証のみに適用
wget –http-user=webuser –http-password=webpass https://example.com/secured/page.htmlFTP認証のみに適用
wget –ftp-user=ftpuser –ftp-password=ftppass ftp://ftp.example.com/files/archive.zip
“`
--auth-no-challenge
- 目的: HTTP認証のチャレンジ応答を待たずに認証情報を送信する。
- 書式:
wget --auth-no-challenge [URL]
- 説明: 通常、HTTP認証ではサーバーからのチャレンジ(401 Unauthorized応答)を受けてから認証情報を送信します。しかし、一部のサーバーではチャレンジなしに認証情報を送信する必要がある場合があります。このオプションを使うと、最初のアクセスから認証情報を送信します。
- 使用例:
bash
wget --user=myuser --password=mypass --auth-no-challenge https://example.com/api/protected_resource
4.4. プロキシ設定
--proxy=on|off
--proxy-user=<user>
, --proxy-password=<password>
- 目的: HTTP/HTTPS/FTP プロキシ経由でダウンロードを行う。
- 書式:
bash
wget --proxy=on [URL(s)]
export http_proxy="http://[host]:[port]/"
# または
wget --proxy=on --proxy-user=<user> --proxy-password=<password> [URL] - 説明: システムの環境変数 (
http_proxy
,https_proxy
,ftp_proxy
) または.wgetrc
ファイルでプロキシ設定がされている場合、wget
はデフォルトでそれを使用します。--proxy=off
でプロキシの使用を無効にできます。プロキシ自体が認証を要求する場合、--proxy-user
と--proxy-password
を使用します。 -
使用例:
“`bash
# 環境変数でプロキシを設定している場合
export http_proxy=”http://proxy.example.com:8080/”
wget https://example.com/somefile.htmlプロキシ認証が必要な場合
wget –proxy-user=proxyuser –proxy-password=proxypass https://example.com/anotherfile.pdf
“`
--no-proxy
- 目的: 環境変数や設定ファイルでプロキシが指定されていても、特定のホストに対してプロキシを使用しない。
- 書式:
wget --no-proxy [URL(s)]
- 説明: ローカルネットワーク内のサーバーなど、特定の接続でプロキシをバイパスしたい場合に便利です。これは、
NO_PROXY
またはno_proxy
環境変数に指定されたホストリストと同様の機能を提供します。 - 使用例:
bash
# プロキシが設定されているが、このダウンロードではプロキシを使わない
wget --no-proxy http://internal-server/local-resource.txt
4.5. HTTPS/SSL 証明書
--no-check-certificate
- 目的: HTTPS接続時にSSL/TLS証明書の検証を行わない。
- 書式:
wget --no-check-certificate [URL]
- 説明: 通常、
wget
はHTTPS接続時にサーバー証明書を検証します。自己署名証明書や、検証に失敗する証明書を持つサイトからダウンロードする場合、このオプションを使わないとエラーでダウンロードできません。ただし、セキュリティリスクがあるため、信頼できるサイト以外では使用を避けるべきです。中間者攻撃のリスクを高めます。 - 使用例:
bash
# 自己署名証明書を使用しているサイトからダウンロードする場合 (非推奨)
wget --no-check-certificate https://internal-test-server/data.csv
4.6. 再帰的ダウンロードとミラーリング
wget
の最も強力な機能の一つが、リンクを辿って複数のファイルを再帰的にダウンロードする機能です。これはウェブサイトのミラーリングなどに利用されます。
-r
(recursive)
- 目的: 再帰的ダウンロードを有効にする。
- 書式:
wget -r [URL]
- 説明: 指定したURLのページをダウンロードした後、そのページ内のリンクを解析し、さらにリンク先のページやファイルをダウンロードしていきます。再帰の深さのデフォルトは5ですが、
-l
オプションで変更できます。 - 使用例:
bash
# 指定したURLから再帰的にダウンロードを開始 (デフォルト深さ5)
wget -r https://example.com/directory/
-l <depth>
(level)
- 目的: 再帰的ダウンロードの最大深さを指定する。
- 書式:
wget -r -l <depth> [URL]
- 説明:
-r
オプションと組み合わせて使用し、リンクを辿る最大の階層数を指定します。<depth>
に0
を指定すると無限(またはファイルシステムのリソースが許す限り)に辿りますが、これは非常に危険です。一般的には、深さを限定して使用します。 - 使用例:
bash
# 再帰の深さを2に限定してダウンロード
wget -r -l 2 https://example.com/docs/
--no-parent
- 目的: 親ディレクトリへのリンクを辿らない。
- 書式:
wget -r --no-parent [URL]
- 説明: 再帰的ダウンロードを行う際、デフォルトでは上位のディレクトリへのリンクも辿ることがあります (
index.html
から../
へのリンクなど)。このオプションを使うと、ダウンロードを開始したディレクトリとその下層のディレクトリ内のリンクのみを辿るようになります。これにより、意図しない範囲までダウンロードが広がるのを防ぎます。 - 使用例:
bash
# ディレクトリ以下の内容を、親ディレクトリへは戻らずに再帰的にダウンロード
wget -r --no-parent https://example.com/downloads/
-A <list>
(accept)
- 目的: ダウンロードを許可するファイルタイプを指定する。
- 書式:
wget -r -A <list> [URL]
- 説明: 再帰的ダウンロードの際、指定した拡張子やパターンに一致するファイルのみをダウンロードします。
<list>
はカンマ区切りで指定します。シェルワイルドカード(*.html
,*.pdf
など)も使用できます。 -
使用例:
“`bash
# .pdf と .zip ファイルのみを再帰的にダウンロード
wget -r -A ‘.pdf,.zip’ https://example.com/files/.html と .css ファイルのみを再帰的にダウンロード
wget -r -A ‘.html,.css’ https://example.com/website/
“`
-R <list>
(reject)
- 目的: ダウンロードを拒否するファイルタイプを指定する。
- 書式:
wget -r -R <list> [URL]
- 説明:
-A
の逆で、指定した拡張子やパターンに一致するファイルはダウンロードから除外します。 - 使用例:
bash
# .gif と .jpg ファイルを除くすべてのファイルを再帰的にダウンロード
wget -r -R '.gif,.jpg' https://example.com/gallery/
-D <domains>
(domains)
- 目的: ダウンロードを許可するドメインを指定する。
- 書式:
wget -r -D <domains> [URL]
- 説明: 再帰的ダウンロードの際に、指定したドメイン内のリンクのみを辿るように制限します。
<domains>
はカンマ区切りで複数指定できます。 -
使用例:
“`bash
# example.com ドメイン内のリンクのみを辿る
wget -r -D example.com https://example.com/example.com と anothersite.org ドメイン内のリンクのみを辿る
wget -r -D example.com,anothersite.org https://example.com/linked/
“`
--restrict-file-names=unix|windows
- 目的: ダウンロードしたファイルのファイル名を指定したOSの命名規則に合わせる。
- 書式:
wget --restrict-file-names=unix|windows [URL]
- 説明: ウェブ上のファイル名には、UnixやWindowsのファイルシステムでは扱えない文字(
/
,?
,&
,\
など)が含まれていることがあります。このオプションを使うと、これらの文字を安全な文字に置き換えるなどの処理を行います。 -
使用例:
“`bash
# ファイル名をUnixフレンドリーな形式に制限
wget -r –restrict-file-names=unix https://example.com/archives/ファイル名をWindowsフレンドリーな形式に制限
wget -r –restrict-file-names=windows https://example.com/files/
“`
-k
(convert-links)
- 目的: ダウンロードしたHTMLやCSSファイル内のリンクをローカルでの閲覧用に変換する。
- 書式:
wget -r -k [URL]
- 説明: ウェブサイトをミラーリングする際、ダウンロードしたHTMLファイル内のリンクは元のオンライン上のURLを指しています。
-k
オプションを使うと、これらのリンクをダウンロードしたローカルファイルパスに書き換えてくれます。これにより、ダウンロードしたウェブサイトをオフラインでブラウザから開いたときに、内部リンクが正しく機能するようになります。 - 使用例:
bash
# ウェブサイトをミラーリングし、リンクをローカル用に変換
wget -r -k https://example.com/docs/
-K
(backup-converted)
- 目的:
-k
オプションでリンクを変換する際に、元のファイルをバックアップとして保存する。 - 書式:
wget -r -k -K [URL]
- 説明:
-k
でリンクを変換する際、変換前の元のファイルを.orig
という拡張子を付けてバックアップとして残します。これにより、変換に問題があった場合でも元の状態に戻せます。 - 使用例:
bash
# ミラーリング、リンク変換、元のファイルのバックアップ保存
wget -r -k -K https://example.com/old_site/
-m
(mirror)
- 目的: ウェブサイトをミラーリングするためのショートカットオプション。
- 書式:
wget -m [URL]
- 説明:
-m
は-r -l inf --no-vary-header -t inf -N
とほぼ同等です(バージョンによって異なる場合があります)。つまり、再帰的に無限深度で辿り、リトライ回数も無限、タイムスタンプに基づいて新しいファイルのみダウンロード・更新し、親ディレクトリには戻りません。ウェブサイト全体をダウンロードしてローカルに保存するのに便利です。-k
を追加で指定することが多いです。 -
使用例:
“`bash
# ウェブサイト全体をミラーリング(無限深度、リトライ無限など)
wget -m https://example.com/ミラーリングし、リンクをローカル用に変換
wget -m -k https://example.com/manual/
“`
-X <list>
(exclude-directories)
- 目的: 再帰的ダウンロードの際に無視するディレクトリを指定する。
- 書式:
wget -r -X <list> [URL]
- 説明: 指定したパス(URLのパス部分)に含まれるディレクトリ以下のファイルやリンクを無視します。
<list>
はカンマ区切りで指定できます。絶対パスまたは相対パスで指定可能です。 - 使用例:
bash
# /private/ や /temp/ ディレクトリ以下を無視して再帰的にダウンロード
wget -r -X /private/,/temp/ https://example.com/data/
4.7. ヘッダーとクッキーの操作
--header='Header-Name: value'
- 目的: HTTPリクエストにカスタムヘッダーを追加する。
- 書式:
wget --header='Header-Name: value' [URL]
- 説明: サーバーに送信するHTTPヘッダーに、任意のヘッダーフィールドを追加または変更します。複数の
--header
オプションを指定することで、複数のヘッダーを追加できます。これにより、特定のユーザーエージェントを装ったり、Cookieを送信したり、APIキーを渡したりといったことが可能になります。 -
使用例:
“`bash
# 特定のユーザーエージェントを装う
wget –header=’User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36′ https://example.com/APIキーをヘッダーで送信する (例)
wget –header=’X-API-Key: your_api_key_here’ https://api.example.com/data/
“`
--user-agent=<agent-string>
- 目的:
User-Agent
ヘッダーを特定の文字列に設定する。 - 書式:
wget --user-agent=<agent-string> [URL]
- 説明:
--header='User-Agent: ...'
と同じ目的ですが、専用のオプションとして用意されています。ウェブサイトによっては、特定のユーザーエージェントからのアクセスのみを許可したり、異なるコンテンツを提供したりすることがあります。 - 使用例:
bash
# Googlebot を装う
wget --user-agent='Googlebot/2.1 (+http://www.google.com/bot.html)' https://example.com/
--referer=<url>
- 目的:
Referer
ヘッダーを特定のURLに設定する。 - 書式:
wget --referer=<url> [URL]
- 説明: サーバーに対して、どのページからリンクを辿ってきたかを示す
Referer
ヘッダーを送信します。一部のサイトでは、特定のページからのアクセスであるかを確認する場合があります。 - 使用例:
bash
# example.com/referrer_page からアクセスしたように見せる
wget --referer='https://example.com/referrer_page' https://example.com/download_page/file.zip
--load-cookies=<file>
- 目的: 指定したファイルからクッキーを読み込む。
- 書式:
wget --load-cookies=<file> [URL]
- 説明: 以前のセッションで保存したクッキー情報を使用して、ログイン状態を維持したままリソースにアクセスする場合などに利用します。クッキーファイルは通常、ブラウザからエクスポートしたり、
wget
の--save-cookies
オプションで保存したりしたものです。Mozilla/Netscape形式のクッキーファイルに対応しています。 - 使用例:
bash
# 以前保存したクッキーファイルを使用して認証済みページにアクセス
wget --load-cookies=my_cookies.txt https://example.com/members_only/data.csv
--save-cookies=<file>
- 目的: セッション中にサーバーから受け取ったクッキーを指定したファイルに保存する。
- 書式:
wget --save-cookies=<file> [URL]
- 説明: ログインプロセスなどでサーバーから発行されたセッションクッキーなどをファイルに保存します。保存されたクッキーは、後続の
wget
実行時に--load-cookies
で読み込んで再利用できます。 -
使用例:
“`bash
# ログインページにアクセスしてクッキーを保存
wget –save-cookies=session_cookies.txt –post-data=’user=myuser&pass=mypass’ https://example.com/login保存したクッキーを使用して保護されたリソースにアクセス
wget –load-cookies=session_cookies.txt https://example.com/dashboard/
“`
4.8. 入力ファイルからのダウンロード
-i <file>
(input-file)
- 目的: ダウンロードしたいURLのリストをファイルから読み込む。
- 書式:
wget -i <file>
- 説明: 多数のファイルをダウンロードする場合、コマンドラインに全てのURLを列挙するのは非効率です。
-i
オプションを使うと、改行区切りでURLが記述されたテキストファイルを指定し、そのリストに沿って順番にダウンロードを実行できます。ファイルにはコメント行(#
で始まる行)を含めることも可能です。 - 使用例:
まず、以下のような内容のファイルurls.txt
を作成します。
text
# This is a comment
https://example.com/data/file_001.txt
https://example.com/data/file_002.txt
ftp://ftp.example.com/pub/archive.zip
https://anothersite.org/reports/latest.pdf
そして、以下のコマンドを実行します。
bash
wget -i urls.txt
このコマンドは、urls.txt
にリストされているすべてのURLからファイルをダウンロードします。
4.9. ファイルのタイムスタンプと更新
-N
(timestamping)
- 目的: ローカルファイルよりも新しいサーバー上のファイルのみをダウンロードする。
- 書式:
wget -N [URL(s)]
- 説明: このオプションを使うと、
wget
はダウンロード先のファイルが存在する場合、サーバーにファイルのタイムスタンプを確認します。ローカルファイルのタイムスタンプがサーバー上のファイルよりも新しい、または同じであれば、ダウンロードをスキップします。サーバー上のファイルが新しい場合にのみダウンロードを実行します。これは、既にダウンロード済みのファイルを効率的に更新したい場合に便利です。 - 使用例:
bash
# ローカルに存在するファイルよりも新しい場合のみダウンロード
wget -N https://example.com/latest_version.tar.gz
注意: この機能は、サーバーがLast-Modifiedヘッダーを正しく送信している場合にのみ機能します。
4.10. バックグラウンド実行
-b
(background)
- 目的:
wget
プロセスをバックグラウンドで実行する。 - 書式:
wget -b [URL(s)]
- 説明: ダウンロードを開始した後、
wget
はすぐにターミナル制御を解放し、バックグラウンドで実行を続けます。標準出力と標準エラー出力はデフォルトでwget-log
というファイルにリダイレクトされます。これにより、ダウンロード中にターミナルで他の作業を行うことができます。 - 使用例:
bash
# バックグラウンドで非常に大きなファイルをダウンロード
wget -b https://example.com/huge_dataset.csv.gz
バックグラウンドで実行されたプロセスのPIDが表示されます。ダウンロードの進捗や結果は、通常wget-log
または-o
/-a
オプションで指定したログファイルで確認できます。
4.11. その他の便利なオプション
-4
(ipv4)
-6
(ipv6)
- 目的: 強制的にIPv4またはIPv6アドレスのみを使用して接続する。
- 書式:
wget -4 [URL]
またはwget -6 [URL]
- 説明: DNSルックアップで複数のIPアドレス(IPv4とIPv6)が見つかった場合、
wget
は通常いずれか適切な方を選択します。これらのオプションを使うと、使用するIPプロトコルを明示的に指定できます。ネットワーク環境によっては、特定のプロトコルでのみ接続が成功する場合に役立ちます。 -
使用例:
“`bash
# IPv4を使用してダウンロード
wget -4 https://example.com/IPv6を使用してダウンロード
wget -6 https://ipv6.google.com/
“`
--spider
- 目的: ファイルを実際にダウンロードせず、存在確認とリンクチェックのみを行う。
- 書式:
wget --spider [URL(s)]
- 説明: 指定したURLや再帰的に辿ったリンク先のURLが存在するかどうかを確認し、そのステータスコード(200 OK, 404 Not Foundなど)を表示します。ファイルをディスクに保存することはありません。壊れたリンクを探したり、サイトの構造を確認したりするのに便利です。
-
使用例:
“`bash
# URLの存在を確認
wget –spider https://example.com/non_existent_page.htmlウェブサイト内のリンク切れを確認(再帰的に)
wget -r –spider https://example.com/
“`
--cut-dirs=<number>
- 目的: 再帰的ダウンロードでローカルディレクトリ構造を作成する際に、指定した数のディレクトリをパスから削除する。
- 書式:
wget -r --cut-dirs=<number> [URL]
- 説明: 再帰的にダウンロードする場合、サーバー上のディレクトリ構造をローカルに再現します。例えば
/a/b/c/file.txt
というURLをダウンロードすると、ローカルには./a/b/c/file.txt
という構造が作成されます。--cut-dirs=1
とすると./b/c/file.txt
、--cut-dirs=2
とすると./c/file.txt
となります。 - 使用例:
bash
# /pub/reports/2023/ の中のファイルをダウンロードするが、ローカルでは ./2023/ に保存
wget -r --no-parent --cut-dirs=2 https://example.com/pub/reports/2023/
--random-wait
- 目的: リトライまたは連続ダウンロード間の待機時間をランダムにする。
- 書式:
wget --random-wait [URL(s)]
- 説明:
--wait
または--waitretry
オプションで指定した待機時間の範囲内で、待機時間をランダムに変化させます。具体的には、指定した値の0.5倍から1.5倍の間のランダムな時間待機します。これは、ボットによるアクセスのように見えないようにするため、サーバーへの負荷を分散させるために使用されます。 - 使用例:
bash
# 各ダウンロード間の待機時間を5秒±2.5秒の範囲でランダムにする
wget --wait=5 --random-wait -i urls.txt
5. wget の応用例
これまでに説明したオプションを組み合わせることで、wget
は非常に多様なダウンロードタスクを実行できます。いくつかの代表的な応用例を紹介します。
5.1. ウェブサイト全体のミラーリング
ブログやドキュメントサイトなど、ウェブサイト全体をローカルにダウンロードしてオフラインで閲覧したい場合にミラーリング機能が役立ちます。
bash
wget \
--recursive \
--level=inf \
--no-clobber \
--page-requisites \
--html-extension \
--convert-links \
--restrict-file-names=unix \
--domains example.com \
--no-parent \
https://example.com/
--recursive
: 再帰ダウンロードを有効にします。--level=inf
: 可能な限り深くリンクを辿ります(注意して使用)。--no-clobber
: 同じファイル名で上書きしません(既にダウンロード済みの場合はスキップ)。--page-requisites
: HTMLファイルだけでなく、そのページ表示に必要な補助ファイル(CSS、画像、JavaScriptなど)もダウンロードします。--html-extension
:index.html
のようなファイルがないディレクトリインデックスをダウンロードした場合に、.html
拡張子を付けて保存します。--convert-links
: ダウンロードしたファイル内のリンクをローカルファイルを参照するように変換します(オフライン閲覧用)。--restrict-file-names=unix
: ファイル名をUnix環境で問題ない形式に制限します。--domains example.com
:example.com
ドメイン内のリンクのみを辿ります(外部サイトへのリンクは無視)。--no-parent
: 親ディレクトリへのリンクは辿りません。
より簡単なミラーリングは -m
オプションを使用します。通常はこれに -k
を追加します。
bash
wget -m -k https://example.com/
これは上記の長いコマンドの多くを含んだショートカットですが、細かい制御が必要な場合は個別のオプションを組み合わせる方が柔軟です。
5.2. 特定の種類のファイルのみダウンロード
ウェブサイトから画像ファイルだけ、PDFファイルだけ、特定のバージョンのアーカイブだけなどをまとめてダウンロードしたい場合に使用します。
bash
wget \
--recursive \
--no-parent \
--domains example.com \
--accept '.jpg,.jpeg,.png,.gif' \
https://example.com/gallery/
--accept '.jpg,.jpeg,.png,.gif'
: 拡張子が.jpg
,.jpeg
,.png
,.gif
のファイルのみをダウンロードします。
複数の拡張子を指定する場合はカンマで区切ります。特定のディレクトリ以下に限定したい場合は、URLでパスを指定し、--no-parent
で親ディレクトリへの移動を防ぎます。
特定のパターンに一致するファイル名だけをダウンロードしたい場合にも -A
が使えます。
“`bash
file_2023_*.csv という名前のファイルのみダウンロード
wget -r -A ‘file_2023_*.csv’ https://example.com/data/
“`
5.3. 認証が必要なサイトからのダウンロード
Basic認証やDigest認証が必要なサイトからファイルをダウンロードする場合です。
bash
wget \
--user=myuser \
--password=mypass \
https://example.com/protected/archive.zip
ログイン後に発行されるセッションクッキーを使って認証を維持する必要がある場合は、ログインプロセスをシミュレートしてクッキーを取得し、それを使用します。
“`bash
1. ログインページにPOSTリクエストを送り、セッションクッキーを保存
wget \
–save-cookies=session_cookies.txt \
–keep-session-cookies \
–post-data=’username=myuser&password=mypass’ \
https://example.com/login
2. 保存したクッキーを使用して保護されたファイルにアクセス
wget \
–load-cookies=session_cookies.txt \
https://example.com/members/document.pdf
“`
--keep-session-cookies
:wget
の実行が終了してもセッションクッキーを保存ファイルに残します。
5.4. ダウンロードリストを使った一括ダウンロード
多数の異なるURLからファイルをダウンロードする場合に、URLリストファイルを使うのが最も効率的です。
“`bash
urls.txt ファイルを作成 (各行に1つのURL)
cat > urls.txt <<EOF
https://example.com/files/file1.txt
https://anothersite.org/docs/report.pdf
ftp://ftp.example.com/pub/data.tar.gz
EOF
ファイルリストから一括ダウンロード
wget -i urls.txt
“`
この方法と、--wait
や --limit-rate
オプションを組み合わせることで、サーバーに過度な負荷をかけずに大量のファイルを順番にダウンロードできます。
“`bash
リストからダウンロード、各ダウンロード間に2秒待機、速度を1MB/sに制限
wget -i urls.txt –wait=2 –limit-rate=1m
“`
5.5. スクリプトでの活用例
wget
はシェルスクリプトや他のプログラミング言語から簡単に呼び出せるため、自動化スクリプトの核としてよく利用されます。
例: 定期的なバックアップ取得スクリプト
“`bash
!/bin/bash
設定
DOWNLOAD_DIR=”/backup/downloads/mydata”
LOG_FILE=”/var/log/mydata_backup.log”
URL=”https://example.com/backup/latest.sql.gz”
WGET_OPTIONS=”-a ${LOG_FILE} -P ${DOWNLOAD_DIR} -N –tries=5 –waitretry=10″
ダウンロード実行
echo “$(date): Starting download of ${URL}” >> ${LOG_FILE}
wget ${WGET_OPTIONS} ${URL}
結果の確認
if [ $? -eq 0 ]; then
echo “$(date): Download completed successfully.” >> ${LOG_FILE}
else
echo “$(date): Download failed.” >> ${LOG_FILE}
fi
“`
このスクリプトは、特定のURLからファイルをダウンロードし、ログをファイルに記録します。-N
オプションにより、ファイルが更新されている場合のみダウンロードが行われます。 cronなどに登録することで、日次や週次で自動的にバックアップファイルを取得するようなシステムを構築できます。
例: ウェブサイトのコンテンツ更新チェック
--spider
オプションと組み合わせることで、ウェブサイトのコンテンツ更新をチェックするスクリプトも作成可能です。
“`bash
!/bin/bash
URL=”https://example.com/important_page.html”
LOCAL_COPY=”/path/to/local/copy/important_page.html”
NOTIFICATION_EMAIL=”[email protected]”
タイムスタンプに基づいて新しいバージョンがあるか確認 (ダウンロードはしない)
wget –spider –quiet –output-document=/dev/null -N “${URL}”
wget の終了ステータスを確認
0: 何もダウンロードされなかった (ローカルファイルが新しいか同じ)
1: 何らかのエラー
2: ファイルがダウンロードされた (サーバー上のファイルが新しかった)
3: 再帰ダウンロードで一部ダウンロードできなかったものがある
4: 再帰ダウンロードでダウンロードできなかったものがある
… (詳細は man wget を参照)
if [ $? -eq 2 ]; then
echo “Notification: ${URL} has been updated.” | mail -s “Website Update Alert” ${NOTIFICATION_EMAIL}
echo “$(date): ${URL} updated. Notification sent.” >> /var/log/update_check.log
# 新しいバージョンをダウンロードしたい場合は wget -O … $URL をここに追加
else
echo “$(date): ${URL} unchanged or error occurred.” >> /var/log/update_check.log
fi
“`
このスクリプトは、-N --spider
を使用してサーバー上のファイルがローカルのコピーより新しいかどうかだけを確認します。新しい場合にのみ(終了ステータスが2の場合)、指定したメールアドレスに通知を送信します。
6. 注意点とベストプラクティス
wget
は強力なツールですが、その使用にあたってはいくつかの注意点があります。
6.1. サーバーへの負荷
再帰的ダウンロード(特に深さ制限なしや広範囲のドメインを対象とする場合)は、サーバーに短時間で大量のリクエストを送信することになります。これにより、サーバーに過度な負荷がかかり、他のユーザーの利用に影響を与えたり、最悪の場合サービス停止に追い込んだりする可能性があります。
- ベストプラクティス:
--wait
オプションでリクエスト間に適切な待機時間を設ける。--limit-rate
でダウンロード速度を制限する。- 再帰の深さ
-l
や対象ドメイン-D
、ファイルタイプ-A
/-R
、ディレクトリ-X
を適切に制限し、必要なものだけをダウンロードする。 - 大きなサイトをミラーリングする場合は、サイトの管理者と事前に連絡を取り、許可を得たり、推奨されるダウンロード方法を確認したりする。
6.2. robots.txt の尊重
ウェブサイトのルートディレクトリにある robots.txt
ファイルは、どのページやディレクトリにウェブクローラーがアクセスして良いか(またはダメか)を指示するものです。wget
はデフォルトで robots.txt
を尊重する設定になっています (--execute robots=on
がデフォルト)。
- ベストプラクティス:
- 特別な理由がない限り、
robots.txt
の設定を無視しない (--execute robots=off
は注意して使用する)。これはウェブサイトの規約を守り、サーバーに不要な負荷をかけないために重要です。
- 特別な理由がない限り、
6.3. 法的な問題
ウェブサイトのコンテンツには著作権があります。許可なくコンテンツをダウンロードし、再配布したり、オフラインで公開したりすることは、著作権侵害にあたる可能性があります。また、ウェブサイトの利用規約で自動ダウンロードやミラーリングが禁止されている場合もあります。
- ベストプラクティス:
- ダウンロードしたいコンテンツの著作権や利用規約を確認する。
- 個人的な利用目的であっても、利用規約に違反しないか確認する。
6.4. セキュリティ
パスワードをコマンドライン引数で指定する、SSL証明書の検証を無効にする (--no-check-certificate
) といった行為はセキュリティリスクを伴います。
- ベストプラクティス:
- パスワードはコマンドライン引数ではなく、環境変数や設定ファイル、対話入力を促す方法などを検討する(ただし
wget
自体に対話入力オプションは無いので、スクリプトなどで工夫が必要)。 --no-check-certificate
は信頼できないサイトでは絶対に使用しない。信頼できる証明機関によって発行された証明書を使用しているか常に確認する。
- パスワードはコマンドライン引数ではなく、環境変数や設定ファイル、対話入力を促す方法などを検討する(ただし
7. まとめ
wget
コマンドは、ウェブからファイルをダウンロードするための非常に強力で柔軟なツールです。単純な単一ファイルのダウンロードから、多数のファイルを一括で取得したり、ウェブサイト全体をミラーリングしたりと、その応用範囲は広いです。
この記事では、wget
の基本的な使い方から、ファイル名・保存場所の指定、リトライ、待機、速度制限、認証、プロキシ、HTTPS、再帰的ダウンロード、ファイルタイプ・ドメインのフィルタリング、リンク変換、クッキー、入力ファイルからのダウンロード、タイムスタンプによる更新チェック、バックグラウンド実行、その他多くの便利なオプションについて、詳細な説明と具体的な使用例を交えて解説しました。また、wget
を使用する上での注意点やベストプラクティス(サーバー負荷、robots.txt、法的な問題、セキュリティ)にも触れました。
wget
はコマンドラインツールであるため、GUIツールの直感性はありませんが、一度使い方を覚えれば、自動化やバッチ処理、サーバー環境での作業において手放せないツールとなるでしょう。この記事が、皆さんが wget
の可能性を最大限に引き出し、日々の作業をより効率的に進めるための一助となれば幸いです。
さらに深く学びたい場合は、man wget
コマンドで表示される公式のマニュアルページを参照することをお勧めします。そこには、この記事で触れられなかったさらに多くのオプションや詳細な情報が網羅されています。
Happy Downloading!