wgetコマンドとは?基本の使い方と活用例を徹底解説
インターネット上からファイルをダウンロードすることは、私たちのデジタルライフにおいて日常的な操作です。Webブラウザを使えば、クリック一つで簡単にファイルを入手できます。しかし、サーバー上にある多数のファイルを一括で取得したい場合、特定の条件に合致するファイルだけを選んでダウンロードしたい場合、あるいはダウンロード処理を自動化したい場合など、より高度なニーズに対応するにはどうすれば良いでしょうか?
そこで登場するのが、コマンドラインインターフェース(CUI)で動作する強力なダウンロードツール、wget
コマンドです。本記事では、この wget
コマンドについて、その「とは何か」という基本から、多岐にわたるオプションを使った応用、そして実際の活用例まで、約5000語にわたって徹底的に解説します。
1. はじめに:なぜwgetコマンドを学ぶのか?
インターネットは情報の宝庫であり、その情報の多くはファイルとして存在します。ドキュメント、画像、音声、動画、ソフトウェアの実行ファイル、データのアーカイブなど、私たちは日々様々な種類のファイルをネットワーク経由で取得しています。
通常、個人が手動でファイルをダウンロードする際には、Webブラウザが非常に便利です。リンクをクリックしたり、右クリックして「名前を付けてリンク先を保存」を選択したりするだけで、直感的に操作できます。
しかし、以下のようなケースでは、Webブラウザを使った手動操作は非効率的であったり、不可能であったりします。
- 大量のファイルをまとめてダウンロードしたい: Webサイト上の複数のファイル(例: シリーズ化されたレポート、ソフトウェアの各バージョン)を一つずつ手動でダウンロードするのは手間がかかります。
- 特定の条件に合うファイルだけをダウンロードしたい: 例えば、あるディレクトリにある全てのPDFファイルや画像ファイルだけをまとめて取得したい場合などです。
- ダウンロード処理を自動化したい: 定期的に更新されるデータファイルを毎日決まった時間にダウンロードする、といったタスクを自動的に実行したい場合です。cronなどのタスクスケジューラと組み合わせることで実現できます。
- サーバーへの負荷を考慮してダウンロードしたい: 短時間に大量のアクセスを集中させず、間隔を空けてダウンロードしたい場合があります。
- ダウンロード中にネットワークが切断されても、途中から再開したい: 大容量ファイルをダウンロードする際に、最初からやり直すことなく効率的に完了させたい要望です。
- コマンドライン環境で作業している: サーバー上で作業している場合など、GUI環境がない、あるいはGUIよりもCUIの方が都合が良い場合があります。
これらの高度なニーズに応えるための強力なツールが、今回解説する wget
コマンドです。wget
は、非対話型(ユーザーの操作を必要としない)で動作するため、スクリプトに組み込んで自動化したり、バックグラウンドで実行したりするのに非常に適しています。
この記事では、wget
コマンドのインストール方法から始め、最も基本的なファイルダウンロードの方法、そして大量のオプションを一つずつ丁寧に解説し、具体的な活用例を豊富に紹介します。これを読めば、あなたのファイルダウンロード作業が劇的に効率化されることでしょう。
2. wgetコマンドとは何か? その特徴と用途
wget
は、GNUプロジェクトによって開発されている、フリーでオープンソースのコマンドラインツールです。その名前は “World Wide Web Get” に由来し、主にWeb上(HTTP, HTTPSプロトコル)やFTPサーバーからファイルを非対話的に取得するために設計されています。
2.1 主な機能と特徴
wget
の主要な機能と特徴は以下の通りです。
- 複数のプロトコル対応: HTTP, HTTPS, FTPといった、インターネット上で広く使われているプロトコルに対応しています。
- 非対話型ダウンロード: ユーザーの操作なしに、コマンド一つでダウンロードを開始し、完了します。これにより、スクリプトやバッチ処理に組み込むことが容易になります。
- 再帰的ダウンロード: 指定したURLだけでなく、そこからリンクされている他のページやファイルも、設定した深さや条件に従って自動的にたどってダウンロードできます。これにより、Webサイトの一部または全体をミラーリング(ローカルに複製)することが可能です。
- ダウンロードの再開(レジューム機能): ネットワークエラーなどでダウンロードが中断されても、最初からやり直すのではなく、中断された時点からダウンロードを再開できます。これは大容量ファイルのダウンロードにおいて特に有用です。
- タイムスタンプによるダウンロード制御: ローカルにあるファイルよりもサーバー上のファイルが新しい場合にのみダウンロードする、といった制御が可能です。これにより、ファイルの同期を効率的に行えます。
- 帯域幅の制限: ダウンロード速度に上限を設定することで、ネットワーク帯域を占有しすぎないように調整できます。
- バックグラウンド実行: ダウンロード処理をバックグラウンドで実行させ、ターミナルを他の作業に使用できます。
- 認証への対応: HTTP基本認証など、パスワード保護されたリソースへのアクセスに対応しています。
- プロキシ対応: プロキシサーバー経由でのダウンロードが可能です。
- サーバー負荷への配慮: ダウンロード間の待機時間を設定したり、robots.txt ファイルを尊重したりすることで、ダウンロード元サーバーへの負荷を軽減する機能を持っています。(ただし、設定によってはサーバーに大きな負荷をかけることも可能です。)
2.2 なぜwgetが便利なのか?
Webブラウザでのダウンロードと比較して、wget
が優れている点はその「自動化」と「柔軟性」です。
- 自動化: 前述の通り、非対話型であるため、シェルスクリプトや他のプログラミング言語から簡単に呼び出すことができます。これにより、定期的なデータ収集やバックアップタスクを自動化できます。
- 柔軟性: 豊富なオプションを組み合わせることで、特定のファイルタイプのみをダウンロードしたり、特定のディレクトリ構造を維持したままダウンロードしたり、再帰的にサイト全体をダウンロードしたりと、様々なニーズに細かく対応できます。
- 効率性: レジューム機能やタイムスタンプによる制御により、ネットワーク障害が発生したり、既にダウンロード済みのファイルが存在したりする場合でも、無駄なく効率的に作業を完了できます。
- 移植性: Unix/Linux系のOSでは標準的に利用可能であるか、容易にインストールできます。macOSやWindowsでも利用でき、多くの環境で同じように動作します。
2.3 wgetとcurlの違いは?
wget
とよく比較されるコマンドに curl
があります。どちらもURLを指定してデータを取得するコマンドですが、設計思想や得意とする範囲が異なります。
- wget: 主に「ダウンロード」に特化しています。WebサイトやFTPサーバーからのファイル取得、再帰的なサイトのミラーリングなどに強みがあります。ダウンロード処理の自動化や効率化に必要な機能(再開、再帰、バックグラウンド実行など)が豊富です。
- curl: より多機能なデータ転送ツールです。HTTP, HTTPS, FTPだけでなく、SCP, SFTP, SMB, TELNET, DICTなど、より多くのプロトコルに対応しています。データの「送受信」が可能で、APIとの連携(POSTデータの送信など)やヘッダー情報の確認、デバッグなど、より幅広い用途に利用されます。wgetのような再帰的ダウンロード機能は標準では持っていません。
簡単に言うと、「ダウンロードして保存したいなら wget、様々なプロトコルでデータを送受信したいなら curl」 といった使い分けが一般的です。本記事は wget
に焦点を当てて解説を進めます。
3. wgetのインストール
wget
は多くのUnix/Linuxシステムに標準でインストールされているか、パッケージマネージャーを使って容易にインストールできます。macOSやWindowsでも利用可能です。
3.1 Linuxでのインストール
多くのLinuxディストリビューションでは、パッケージマネージャーを使って簡単にインストールできます。
- Debian/Ubuntu:
bash
sudo apt update
sudo apt install wget - Fedora/CentOS/RHEL/Rocky Linux/AlmaLinux:
bash
sudo dnf install wget
# または (古いOSの場合)
sudo yum install wget - Arch Linux:
bash
sudo pacman -S wget - openSUSE:
bash
sudo zypper install wget
インストール後、以下のコマンドでバージョン情報を確認できれば成功です。
bash
wget --version
3.2 macOSでのインストール
macOSにはデフォルトでは wget
がインストールされていませんが、Homebrewなどのパッケージマネージャーを使えば簡単にインストールできます。
Homebrewがインストールされていない場合は、公式サイト(https://brew.sh/index_ja)の手順に従ってインストールしてください。
Homebrewがインストールされていることを確認したら、以下のコマンドを実行します。
bash
brew install wget
インストール後、以下のコマンドでバージョン情報を確認できれば成功です。
bash
wget --version
3.3 Windowsでのインストール
Windowsには標準で wget
は含まれていません。利用するにはいくつかの方法があります。
- Windows Subsystem for Linux (WSL) を利用する: WSLをインストールすれば、Linux環境上で
wget
を使用できます。Linuxでのインストール手順を参照してください。これが最も簡単で推奨される方法です。 - Chocolatey パッケージマネージャーを利用する: Windows用のパッケージマネージャーであるChocolateyがインストールされている場合、以下のコマンドでインストールできます。
powershell
choco install wget - 公式ウェブサイトからバイナリをダウンロードする: GNU Wget for Windowsなどのプロジェクトからビルド済みの実行ファイル(.exe)をダウンロードし、環境変数
PATH
に追加するか、実行ファイルのあるディレクトリから使用します。非公式のビルドも多いため、信頼できるソースからダウンロードすることが重要です。
どの方法でインストールした場合でも、コマンドプロンプトまたはPowerShellで wget --version
を実行して確認できます。
4. wgetの基本的な使い方
wget
の最も基本的な使い方は、ダウンロードしたいファイルのURLを指定するだけです。
4.1 単一ファイルをダウンロードする
bash
wget https://example.com/files/document.pdf
このコマンドを実行すると、https://example.com/files/document.pdf
からファイルがダウンロードされ、現在のディレクトリに document.pdf
という名前で保存されます。
実行中、wget
はダウンロードの進行状況(ダウンロード済みのサイズ、現在の速度、完了予定時刻など)をプログレスバーとして表示します。
“`
–2023-10-27 10:00:00– https://example.com/files/document.pdf
Resolving example.com (example.com)… 93.184.216.34
Connecting to example.com (example.com)|93.184.216.34|:443… connected.
HTTP request sent, awaiting response… 200 OK
Length: 1234567 (1.2M) [application/pdf]
Saving to: ‘document.pdf’
document.pdf 100%[===================>] 1.18M 456KB/s in 2.6s
2023-10-27 10:00:03 (456 KB/s) – ‘document.pdf’ saved [1234567/1234567]
“`
ダウンロードが完了すると、'document.pdf' saved
のようなメッセージが表示されます。
4.2 保存するファイル名を指定する (-O オプション)
ダウンロードしたファイルを元のファイル名とは別の名前で保存したい場合は、-O
オプションを使用します。
bash
wget -O my_document.pdf https://example.com/files/document.pdf
このコマンドは、ダウンロードしたファイルを現在のディレクトリに my_document.pdf
という名前で保存します。
4.3 保存先ディレクトリを指定する (-P オプション)
ファイルを特定のディレクトリに保存したい場合は、-P
オプションを使用します。指定したディレクトリが存在しない場合は、自動的に作成されます。
bash
wget -P /path/to/destination https://example.com/files/document.pdf
このコマンドは、/path/to/destination
ディレクトリ内に document.pdf
という名前でファイルを保存します。
-O
オプションと -P
オプションは同時に使用することも可能ですが、その場合は -O
で指定したパスが完全な保存先となります(-P
は無視されます)。通常はどちらか片方、または両方を使わずにデフォルトの動作(現在のディレクトリに元のファイル名で保存)を利用します。
4.4 複数のファイルをダウンロードする
複数のファイルをまとめてダウンロードしたい場合は、単純に複数のURLを引数として指定します。
bash
wget https://example.com/files/file1.txt https://example.com/files/file2.zip https://example.com/images/image.jpg
このコマンドは、指定された3つのファイルを順番にダウンロードし、現在のディレクトリにそれぞれのファイル名で保存します。
URLが多い場合は、後述する -i
オプションを使って、ダウンロードしたいURLのリストをファイルに記述しておき、そのファイルを指定する方法が便利です。
5. wgetの主要オプションの詳細解説
wget
には非常に多くのオプションがあり、ダウンロードの挙動を細かく制御できます。ここでは、特によく使われる主要なオプションをカテゴリ別に分けて詳しく解説します。
5.1 ダウンロード制御に関するオプション
-O <ファイル名>
/--output-document=<ファイル名>
- ダウンロードしたデータを指定したファイル名で保存します。標準出力に出力したい場合は
-O -
と指定します(ただし、バイナリファイルの場合は注意が必要です)。 - 例:
wget -O latest_report.csv https://example.com/reports/current.csv
- ダウンロードしたデータを指定したファイル名で保存します。標準出力に出力したい場合は
-P <ディレクトリ>
/--directory-prefix=<ディレクトリ>
- ダウンロードしたファイルを保存するディレクトリを指定します。指定したディレクトリが存在しない場合は作成されます。
- 例:
wget -P /tmp/downloads https://example.com/data.zip
-c
/--continue
- ダウンロードを中断された箇所から再開します。既に一部だけダウンロードされているファイルがある場合、サーバーがRangeリクエストに対応していれば、続きからダウンロードします。大容量ファイルのダウンロード時にネットワークが切断される可能性がある場合に必須のオプションです。
- 例:
wget -c https://example.com/large_file.tar.gz
- 注: サーバー側がRangeリクエストに対応していない場合、このオプションは効果がありません。
-N
/--timestamping
- ローカルに同じファイル名が存在する場合、サーバー上のファイルのタイムスタンプと比較し、サーバー上のファイルの方が新しい場合にのみダウンロードします。これにより、変更されていないファイルの再ダウンロードを避けて帯域幅を節約できます。ミラーリングなどで効率的にファイルを最新の状態に保ちたい場合に有用です。
- 例:
wget -N https://example.com/update.zip
--limit-rate=<速度>
- ダウンロードの速度を制限します。単位はキロバイト/秒 (k)、メガバイト/秒 (m) です。例えば、500KB/s に制限したい場合は
--limit-rate=500k
と指定します。サーバーやネットワークに過度な負荷をかけたくない場合に利用します。 - 例:
wget --limit-rate=2m https://example.com/video.mp4
- ダウンロードの速度を制限します。単位はキロバイト/秒 (k)、メガバイト/秒 (m) です。例えば、500KB/s に制限したい場合は
-i <ファイル>
/--input-file=<ファイル>
- ダウンロードしたいURLのリストが記述されたファイルを指定します。ファイルには1行につき1つのURLを記述します。大量のファイルをまとめてダウンロードしたい場合に非常に便利です。
- 例:
wget -i urls.txt
(urls.txt の内容例:http://example.com/file1.txt\nhttp://example.com/file2.txt
)
-nd
/--no-directories
- 再帰的ダウンロードを行う際に、リモートのディレクトリ構造を無視して、全てのファイルを指定したディレクトリ直下に保存します。複数のURLから異なるパスのファイルをまとめてダウンロードし、一つのディレクトリに整理したい場合に有用です。
- 例:
wget -r -nd https://example.com/data/files/
(files ディレクトリ内のファイルが全てカレントディレクトリに保存される)
-x
/--force-directories
- 再帰的ダウンロードを行わない場合でも、リモートのディレクトリ構造を強制的にローカルに作成してファイルを保存します。
-nd
とは逆の挙動です。 - 例:
wget -x https://example.com/data/files/document.pdf
(./example.com/data/files/ ディレクトリを作成して保存)
- 再帰的ダウンロードを行わない場合でも、リモートのディレクトリ構造を強制的にローカルに作成してファイルを保存します。
-nH
/--no-host-directories
- 再帰的ダウンロードを行う際に、ホスト名をディレクトリ名として使用しません。通常、
wget -r http://example.com/
とすると./example.com/
ディレクトリが作成されますが、このオプションを付けるとカレントディレクトリ直下にリモートのディレクトリ構造が作成されます。 - 例:
wget -r -nH https://example.com/data/
(./data/ ディレクトリを作成して保存)
- 再帰的ダウンロードを行う際に、ホスト名をディレクトリ名として使用しません。通常、
--no-check-certificate
- HTTPSサイトにアクセスする際に、SSL/TLS証明書の検証を行いません。証明書エラーが発生する場合に一時的に利用できることがありますが、セキュリティリスクが非常に高いため、特別な理由がない限り使用すべきではありません。自己署名証明書など、正当な理由で使用する場合でも、リスクを理解して自己責任で使用してください。
- 例:
wget --no-check-certificate https://intranet.internaldomain/secure_doc.pdf
5.2 再帰的ダウンロードに関するオプション
wget
の最も強力な機能の一つが再帰的ダウンロードです。Webサイト全体や特定の部分をローカルにミラーリングするのに使われます。これらのオプションは通常 -r
オプションと組み合わせて使用します。
-r
/--recursive
- 再帰的ダウンロードを有効にします。指定したURLからリンクをたどり、関連するページやファイルをダウンロードします。このオプションを使用する際は、意図しない大量のダウンロードやサーバーへの過負荷に注意が必要です。
- 例:
wget -r https://example.com/docs/
(docs以下のページやファイルを再帰的にダウンロード)
-l <深さ>
/--level=<深さ>
- 再帰の深さを制限します。
wget -r
はデフォルトでは深さ5まで再帰します。無制限に再帰したい場合は-l inf
または-l 0
を指定しますが、これは非常に危険な場合があるので注意が必要です。 - 例:
wget -r -l 2 https://example.com/
(指定URLからリンクを2階層下までたどる)
- 再帰の深さを制限します。
-np
/--no-parent
- 再帰的ダウンロードにおいて、指定したディレクトリの親ディレクトリへのリンクをたどりません。特定のサブディレクトリ以下のコンテンツだけをダウンロードしたい場合に、サイト全体に遡ってしまうのを防ぐために非常に重要です。
- 例:
wget -r -np https://example.com/data/files/
(filesディレクトリより上の階層には戻らない)
-k
/--convert-links
- ダウンロード完了後、HTMLファイル内のリンク(href属性、src属性など)を、ダウンロードしたローカルファイルを参照するように変換します。これにより、ダウンロードしたWebサイトをオフラインで閲覧した際に、ローカルのファイル間を正しくリンクで移動できるようになります。
- 例:
wget -r -k https://example.com/tutorial/
-p
/--page-requisites
- HTMLファイルの表示に必要な全ての要素(画像、CSSファイル、JavaScriptファイルなど)をダウンロードします。
-k
オプションと組み合わせて使うことで、Webページを完全にオフラインで再現できます。 - 例:
wget -r -p -k https://example.com/article.html
- HTMLファイルの表示に必要な全ての要素(画像、CSSファイル、JavaScriptファイルなど)をダウンロードします。
-H
/--span-hosts
- 再帰的ダウンロードにおいて、元のホストと異なるホストへのリンクもたどります。これは非常に危険なオプションです。 リンク先のサイト全体を意図せずダウンロードしてしまう可能性があります。特定の許可されたドメインリストと組み合わせて使用する場合などに限るべきです。
- 例:
wget -r -H -D example.net https://example.com/link_to_another_site.html
(example.com から example.net へのリンクはたどるが、それ以外のホストはたどらない)
-D <ドメインリスト>
/--domains=<ドメインリスト>
- 再帰的ダウンロードにおいて、リンクをたどる対象のドメインをカンマ区切りで指定します。
-H
オプションを使う場合や、特定の関連サイトだけをダウンロードしたい場合に利用します。 - 例:
wget -r -H -D example.com,another-example.net https://example.com/
- 再帰的ダウンロードにおいて、リンクをたどる対象のドメインをカンマ区切りで指定します。
-A <ファイル拡張子リスト>
/--accept=<ファイル拡張子リスト>
- ダウンロードするファイルの拡張子をカンマ区切りで指定します。特定の種類のファイルだけを収集したい場合に有用です。(例: jpg,png,gif,pdf)。ワイルドカードも使用できます(例: ‘.jpg’,’.png’)。
- 例:
wget -r -A jpg,png,gif https://example.com/images/
-R <ファイル拡張子リスト>
/--reject=<ファイル拡張子リスト>
- ダウンロードしないファイルの拡張子をカンマ区切りで指定します。
-A
オプションの逆です。(例: exe,zip,tar.gz)。 - 例:
wget -r -R exe,zip https://example.com/files/
- ダウンロードしないファイルの拡張子をカンマ区切りで指定します。
--ignore-case
- ダウンロード対象/除外ファイル名の比較において、大文字/小文字を区別しません。ファイルシステムによっては大文字/小文字を区別しない場合があるため、このオプションを使うとより確実に指定できます。
- 例:
wget -r -A .jpg --ignore-case https://example.com/images/
5.3 認証・HTTPヘッダーに関するオプション
--user=<ユーザー名>
/--password=<パスワード>
- HTTP基本認証やFTPログインに必要なユーザー名とパスワードを指定します。
- 例:
wget --user=myuser --password=mypassword https://example.com/private/data.zip
- 注: コマンドラインにパスワードを平文で記述するのはセキュリティ上のリスクがあります。可能な場合は、設定ファイル
.netrc
を利用するなど、他の安全な方法を検討してください。
--auth-no-challenge
- NCSA認証が必要なサイトで、サーバーからの認証要求(challenge)を待たずに、すぐに認証情報を送ります。特定の認証方式で必要な場合があります。
--header=<ヘッダー>
- HTTPリクエストにカスタムヘッダーを追加します。クッキーを送信したり、特定のUser-Agentを設定したりするのに使われます。ヘッダーは
"ヘッダー名: 値"
の形式で指定します。 - 例:
wget --header="User-Agent: MyWgetBot/1.0" https://example.com/
- 例:
wget --header="Cookie: sessionid=abcdef123456" https://example.com/restricted_page.html
- HTTPリクエストにカスタムヘッダーを追加します。クッキーを送信したり、特定のUser-Agentを設定したりするのに使われます。ヘッダーは
--referer=<URL>
- HTTPリクエストの
Referer
ヘッダーに指定したURLを含めます。一部のサイトでは、特定のRefererがないとアクセスが制限される場合があります。 - 例:
wget --referer="https://example.com/index.html" https://example.com/download/file.zip
- HTTPリクエストの
5.4 接続・タイムアウト・リトライに関するオプション
-T <秒>
/--timeout=<秒>
- ネットワーク接続のタイムアウト時間(秒)を設定します。指定した秒数内に接続が確立できない場合、またはデータ転送が再開されない場合にエラーとなります。
- 例:
wget -T 10 https://example.com/slow_server/data.zip
--dns-timeout=<秒>
- DNSルックアップのタイムアウト時間(秒)を設定します。
--connect-timeout=<秒>
- TCP接続の確立のタイムアウト時間(秒)を設定します。
--read-timeout=<秒>
- HTTPリクエストに対するサーバーからの応答待ち時間、またはデータ転送中のデータ受信間隔のタイムアウト時間(秒)を設定します。
--tries=<回数>
/--retries=<回数>
- ダウンロードに失敗した場合のリトライ回数を設定します。デフォルトは20回です。無制限にリトライする場合は
inf
または0
を指定します。ネットワークが不安定な場合に有用です。 - 例:
wget --tries=5 https://example.com/unstable_server/data.zip
- ダウンロードに失敗した場合のリトライ回数を設定します。デフォルトは20回です。無制限にリトライする場合は
-w <秒>
/--wait=<秒>
- 連続してファイルをダウンロードする際に、各ダウンロード間の待機時間(秒)を設定します。サーバーへの過負荷を防ぐために非常に重要なオプションです。ランダムな待機時間を設定したい場合は、
--random-wait
オプションと組み合わせます。 - 例:
wget -r -w 5 https://example.com/archive/
(各ファイルのダウンロード間に5秒待機)
- 連続してファイルをダウンロードする際に、各ダウンロード間の待機時間(秒)を設定します。サーバーへの過負荷を防ぐために非常に重要なオプションです。ランダムな待機時間を設定したい場合は、
--random-wait
-w
オプションで指定した待機時間を、0.5 * SEC から 1.5 * SEC の間のランダムな時間にします。これにより、機械的なアクセスパターンを避けることができ、サーバー側からボットと認識されにくくなります。- 例:
wget -r -w 10 --random-wait https://example.com/archive/
(各ダウンロード間に5~15秒待機)
5.5 ログ・出力に関するオプション
-v
/--verbose
- 詳細な出力(進行状況、ヘッダー情報など)を表示します。デフォルトの動作です。
- 例:
wget -v https://example.com/test.html
-q
/--quiet
- ほとんどの出力を抑制し、静かに動作します。スクリプト内で実行し、通常は出力を表示したくない場合に有用です。エラーメッセージは表示されます。
- 例:
wget -q https://example.com/data.zip
-o <ログファイル>
/--output-file=<ログファイル>
- 標準出力に表示されるメッセージを、指定したログファイルに書き出します。バックグラウンドで実行する場合などにログを残しておきたい場合に便利です。
- 例:
wget -o download.log https://example.com/large_file.tar.gz
--append-output=<ログファイル>
- ログを指定したファイルに追記します。
-o
は毎回ファイルを上書きしますが、こちらは既存のログに新しい情報を追加します。 - 例:
wget --append-output=download.log https://example.com/another_file.zip
- ログを指定したファイルに追記します。
--no-verbose
- デフォルトの詳細出力を抑制します。
-q
ほどではありませんが、進行状況バーなどは表示されます。
- デフォルトの詳細出力を抑制します。
--show-progress
- 詳細出力が抑制されている場合(例:
-q
または--no-verbose
を使用した場合)、プログレスバーのみを強制的に表示します。これにより、静かに実行しつつも進行状況は把握できます。 - 例:
wget -q --show-progress https://example.com/very_large_file.iso
- 詳細出力が抑制されている場合(例:
5.6 その他のオプション
-b
/--background
- ダウンロード処理をバックグラウンドで実行します。コマンド実行後、すぐにプロンプトに戻ります。ダウンロードの進行状況はログファイルに記録されます(
-o
オプションなどで指定しない場合は、デフォルトのログファイルwget-log
に出力されます)。 - 例:
wget -b https://example.com/huge_archive.zip
- ダウンロード処理をバックグラウンドで実行します。コマンド実行後、すぐにプロンプトに戻ります。ダウンロードの進行状況はログファイルに記録されます(
-B <URL>
/--base=<URL>
- 入力ファイル (
-i
オプションで指定) 内の相対URLを解決するためのベースURLを指定します。入力ファイルに絶対URLと相対URLが混在している場合に有用です。 - 例:
wget -i list.txt -B https://example.com/data/
(list.txt に “file1.txt” と記述されている場合、https://example.com/data/file1.txt
として扱われる)
- 入力ファイル (
--mirror
- Webサイトのミラーリングに最適なオプションセット(
-r -l inf -N --no-host-directories
とほぼ同じ)を有効にします。再帰的に、深さ無制限で、タイムスタンプに基づいて最新のファイルのみをダウンロードし、ホスト名のディレクトリを作成しません。このオプションはサイト全体をまるごとダウンロードする可能性があり、サーバーに大きな負荷をかける可能性があるため、使用には十分な注意と許可が必要です。 - 例:
wget --mirror https://example.com/
(example.com サイト全体をミラーリング)
- Webサイトのミラーリングに最適なオプションセット(
--warc=<ファイル名>
/--warc-file=<ファイル名>
- ダウンロードしたコンテンツをWARC (Web ARChive) フォーマットのファイルに保存します。Webアーカイブを作成する際に利用されます。
- 例:
wget --warc=example_archive.warc https://example.com/
6. wgetの活用例
これまでに解説した基本的な使い方や様々なオプションを組み合わせることで、wget
は非常に多様な用途に活用できます。いくつかの具体的な例を見てみましょう。
6.1 例1:単一の大きなファイルをダウンロードし、中断されても再開する
大容量のファイルをダウンロード中にネットワークが不安定になったり、一時的にダウンロードを停止したりしたい場合があります。-c
オプションが役立ちます。
“`bash
ダウンロード開始
wget https://example.com/very/large/software_update.iso
…しばらくしてネットワークが切断されたり、Ctrl+Cで中断したりする…
ダウンロードを再開
wget -c https://example.com/very/large/software_update.iso
“`
最初のコマンドでダウンロードが始まり、中断された後、二番目のコマンドで中断された箇所から自動的にダウンロードが再開されます。
6.2 例2:URLリストから複数のファイルをまとめてダウンロードする
ダウンロードしたいファイルのURLが多数ある場合、それらをテキストファイルにリストアップしておき、-i
オプションを使って一括でダウンロードできます。
まず、ダウンロードしたいURLを urls.txt
というファイルに記述します。
“`text
urls.txt の内容例
https://example.com/data/file_001.csv
https://example.com/data/file_002.csv
https://example.com/reports/latest.pdf
https://example.com/images/logo.png
“`
次に、以下のコマンドを実行します。
bash
wget -i urls.txt
これで、urls.txt
に記述された全てのファイルが現在のディレクトリにダウンロードされます。エラーが発生したURLがあれば、スキップされるか、リトライ設定に従って再試行されます。
6.3 例3:Webサイトの一部(特定のディレクトリ以下)を再帰的にダウンロードする
特定のディレクトリ以下にある全てのファイルやページをダウンロードしたい場合は、-r
オプションと -np
オプションを組み合わせます。
bash
wget -r -np https://example.com/archive/2023/
このコマンドは、https://example.com/archive/2023/
ディレクトリ以下にあるコンテンツを再帰的にダウンロードしますが、/archive/
やそれより上の階層のリンクはたどりません。デフォルトの再帰深さ(通常5)が適用されます。ディレクトリ構造はローカルにも再現されます(例: ./example.com/archive/2023/...
)。
ホスト名のディレクトリを作成したくない場合は、-nH
オプションも追加します。
bash
wget -r -np -nH https://example.com/archive/2023/
これで ./archive/2023/...
という構造でダウンロードされます。
6.4 例4:オフライン閲覧用にWebページと必要な要素をダウンロードする
特定のWebページをオフラインで閲覧したい場合、-p
オプションで関連するCSS、画像、JSなどをダウンロードし、-k
オプションでローカル参照用にリンクを変換します。
bash
wget -p -k https://example.com/useful_article.html
これにより、useful_article.html
ファイルと、そのページを表示するのに必要なリソース(画像、スタイルシート、スクリプトなど)がダウンロードされ、ローカルで useful_article.html
を開くと、リンクや画像などが正しく表示されるようになります。
特定のディレクトリ以下の複数のページとそれらに必要な要素を再帰的にダウンロードしたい場合は、-r
も組み合わせます。
bash
wget -r -p -k https://example.com/tutorial/
この場合も、意図しない深さまでダウンロードが進まないように -l
や -np
オプションと組み合わせることを検討してください。
6.5 例5:特定の種類のファイル(例: PDFファイル)だけをまとめてダウンロードする
あるURL以下(またはサイト全体)から、拡張子が .pdf
のファイルだけをまとめてダウンロードしたい場合は、-r
と -A
オプションを組み合わせます。
bash
wget -r -np -A .pdf https://example.com/documents/
このコマンドは、https://example.com/documents/
ディレクトリ以下を再帰的にたどり(親ディレクトリには戻らず)、拡張子が .pdf
のファイルだけをダウンロードします。
複数の拡張子を指定する場合はカンマ区切りで指定します。
bash
wget -r -np -A .jpg,.png,.gif https://example.com/images/
6.6 例6:認証が必要なページからファイルをダウンロードする
Basic認証などで保護されたページからファイルをダウンロードするには、--user
と --password
オプションを使用します。
bash
wget --user=private_user --password=secret_pass https://example.com/restricted/secret_file.zip
注意: コマンド履歴などにパスワードが残るため、セキュリティ上のリスクがあります。可能であれば、対話的にパスワードを入力するか、安全な方法(例: .netrc ファイル)を検討してください。
6.7 例7:ダウンロード速度を制限してサーバー負荷を軽減する
短時間に大量のファイルをダウンロードすると、ダウンロード元のサーバーに大きな負荷をかける可能性があります。--limit-rate
オプションで速度を制限したり、-w
オプションでダウンロード間に待機時間を設けたりすることで、サーバーへの影響を抑えることができます。
“`bash
ダウンロード速度を 500KB/s に制限
wget –limit-rate=500k https://example.com/large_dataset.tar.gz
再帰的ダウンロードで、各ファイルのダウンロード間に10秒~30秒のランダムな待機時間を設ける
wget -r -w 20 –random-wait https://example.com/public/archive/
“`
-w
オプションと --random-wait
の組み合わせは、連続アクセスによるサーバーへの負荷を分散し、ボットと認識されにくくする効果も期待できます。
6.8 例8:HTTPヘッダーを操作してダウンロードする
特定のUser-Agentを偽装したり、Cookieを送信したりしてダウンロードしたい場合があります。--header
オプションを使用します。
“`bash
User-Agentをブラウザに見せかける
wget –header=”User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3″ https://example.com/some_resource.html
Cookieを送信する
wget –header=”Cookie: logged_in=true; userid=12345″ https://example.com/members_only_file.pdf
“`
これらのテクニックは、正規の利用者としてダウンロードする場合などに役立つことがありますが、サイトの利用規約に反しないか確認することが重要です。
6.9 例9:バックグラウンドでダウンロードを実行し、ログに記録する
大容量ファイルのダウンロードなど、完了までに時間がかかる処理をバックグラウンドで実行し、結果をログファイルに残したい場合は、-b
オプションと -o
オプションを使用します。
“`bash
wget -b -o huge_download.log https://example.com/very/large/archive.zip
バックグラウンドで実行されたことを確認するメッセージが表示される
Continuing in background, pid 12345.
Output will be written to ‘huge_download.log’.
“`
コマンド実行後、すぐにプロンプトが戻ってきます。ダウンロードの進行状況や結果は huge_download.log
ファイルに記録されます。ログファイルを確認することで、ダウンロードが正常に完了したかなどを確認できます。
6.10 例10:ミラーリングモードでサイト全体をダウンロードする(注意!)
--mirror
オプションは、Webサイト全体をローカルに複製する(ミラーリング)ためのショートカットです。これは -r -l inf -N --no-host-directories
オプション群とほぼ同等です。
bash
wget --mirror https://example.com/
繰り返しになりますが、--mirror
オプションは非常に強力であり、ダウンロード先のサイト全体をダウンロードしようとします。意図せず膨大な量のデータを取得したり、サーバーに過度な負荷をかけたりする可能性があります。 このコマンドを実行する前に、ダウンロード先のサイトの利用規約を確認し、必要であればサイト管理者の許可を得てください。また、ローカルディスクに十分な空き容量があることを確認し、必要に応じて -l
(深さ制限) や -R
(除外) などのオプションと組み合わせて、ダウンロード範囲を適切に制御することが強く推奨されます。
7. 注意点とトラブルシューティング
wget
は強力なツールですが、使用方法によっては意図しない結果を招いたり、問題が発生したりすることもあります。
7.1 サーバー負荷への配慮
特に再帰的ダウンロードや大量のファイルをダウンロードする場合、短時間に多数のリクエストを送信することになります。これはダウンロード元のサーバーに大きな負荷をかける可能性があります。
-w
(待機時間) オプションを利用する: ダウンロード間に適切な待機時間を設けることで、サーバーへのリクエスト頻度を下げられます。ランダムな待機時間を設定する--random-wait
も有効です。--limit-rate
(速度制限) オプションを利用する: ダウンロード速度を制限することで、サーバーの帯域幅を占有しすぎるのを防ぎます。robots.txt
を尊重する: 多くのWebサイトは、クローラーなどの自動ツールにアクセスを制限するためのrobots.txt
ファイルを置いています。wget
はデフォルトでrobots.txt
を尊重し、許可されていないリソースへのアクセスを避けます。特別な理由がない限り、--execute robots=off
のようなrobots.txt
の尊重を無効にするオプションは使用すべきではありません。- ダウンロード範囲を適切に制限する:
-l
(再帰深さ),-np
(親ディレクトリをたどらない),-A
(許可拡張子),-R
(拒否拡張子),-D
(許可ドメイン) などのオプションを適切に利用し、必要なリソースのみをダウンロードするようにします。
ダウンロード先のサイト管理者の立場になって、自分のダウンロード行為がどのような影響を与えるかを常に意識することが重要です。許可なく大量のデータやサイト全体をダウンロードする行為は、DoS攻撃と見なされる可能性もあります。
7.2 ディスク容量の確認
特に再帰的ダウンロードや大きなファイルをダウンロードする場合、ローカルディスクの容量を大量に消費する可能性があります。ダウンロードを開始する前に、十分な空き容量があるか確認してください。ダウンロード中に容量不足になると、エラーで中断されます。
7.3 再帰的ダウンロードの注意点
- 無限ループ: サイト構造によっては、リンクをたどり続けることで無限ループに陥る可能性があります。
-l
で深さを制限したり、-np
で親ディレクトリへの遡りを防いだりすることで、このような状況を回避できます。 - 意図しないサイトへの遷移:
-H
オプションを使用したり、他のホストへのリンクを含むページを再帰的にダウンロードしたりする場合、意図しない全く別のサイトに移動してしまい、そのサイトまでダウンロードしてしまう可能性があります。-D
オプションでダウンロード対象ドメインを厳密に指定することが重要です。 - 動的なコンテンツ: Webサイトの中には、アクセスするたびに内容が変化する動的なページや、無限にページを生成するような構造を持つものがあります。このようなサイトに対して再帰的ダウンロードを行うと、予期しない挙動になったり、膨大な量のデータをダウンロードしてしまったりする可能性があります。
7.4 SSL/TLS証明書エラー
HTTPSサイトにアクセスする際に、証明書の期限切れ、ホスト名の不一致、自己署名証明書などにより証明書エラーが発生することがあります。デフォルトでは、wget
は証明書が検証できないHTTPSサイトからのダウンロードを拒否します。
エラーを無視してダウンロードを進めたい場合は --no-check-certificate
オプションを使用できますが、これは中間者攻撃などのセキュリティリスクを高める行為であり、非常に危険です。正当な理由(例: 内部ネットワークのサーバーで自己署名証明書を使用している場合など)がない限り、使用は避けるべきです。
正当な証明書エラーの場合は、以下の点を確認してください。
- クライアントOSの時刻が正確か(時刻のずれが証明書エラーの原因になることがあります)。
- ルート証明書が最新か。
- wgetのバージョンが古い場合、新しい証明書タイプに対応していない可能性がないか。
7.5 403 Forbidden / 404 Not Found エラー
これらのHTTPステータスコードは、リソースへのアクセスが拒否されたり、リソースが見つからなかったりした場合に発生します。
- 403 Forbidden:
- アクセス制限がかかっている可能性があります。認証が必要な場合は
--user
/--password
や--header "Cookie: ..."
を試す。 - User-Agentによってアクセスが拒否されている可能性があります。
--header "User-Agent: ..."
で一般的なブラウザのUser-Agentを偽装してみる。 - robots.txtによってアクセスが禁止されているパスかもしれません(デフォルトでは尊重)。
- ダウンロード元サーバー側でのIPアドレス制限やその他のセキュリティ設定による可能性もあります。
- アクセス制限がかかっている可能性があります。認証が必要な場合は
- 404 Not Found:
- 指定したURLが間違っている。
- ファイルが移動されたか削除された。
- リンクが切れている。
エラーメッセージをよく確認し、原因を特定して対処してください。
7.6 タイムアウトや接続エラー
ダウンロード中に接続が切断されたり、サーバーからの応答がなくなったりする場合があります。
-c
オプションで再開を試みる。--tries
オプションで自動リトライ回数を増やす。-T
オプションでタイムアウト時間を長く設定する。- ネットワーク接続が安定しているか確認する。
8. wgetとcurlの比較(再訪)
前述の通り、wget
と curl
は似ているようで異なるツールです。改めて、その違いと使い分けについてまとめます。
特徴/機能 | wget | curl |
---|---|---|
主な用途 | ファイルのダウンロード、Webサイトのミラーリング | データ転送(送受信)、API連携、デバッグ |
非対話型 | ○ (デフォルト) | ○ (デフォルト) |
プロトコル | HTTP, HTTPS, FTP | HTTP, HTTPS, FTP, SFTP, SCP, SMB, TELNET, etc. (多数) |
ダウンロード再開 | ○ (-c オプション) | ○ (-C – オプション) |
再帰的ダウンロード | ○ (-r オプション、豊富なオプション) | × (基本的に非対応、外部スクリプトで実現) |
ダウンロード速度制限 | ○ (–limit-rate) | ○ (–limit-rate) |
バックグラウンド実行 | ○ (-b オプション) | × (OSのバックグラウンド実行機能を利用) |
認証対応 | HTTP基本認証, FTP | 多様な認証方式 |
HTTPヘッダー操作 | ○ (–header) | ○ (-H オプション、詳細な制御が可能) |
POST/PUT等の送信 | × | ○ (-X POST など、データ送信が可能) |
標準出力への出力 | -O – で可能 | ○ (デフォルトの動作) |
インストール | Linux標準が多い、Homebrew等で容易 | Linux標準が多い、Homebrew等で容易 |
使い分けの指針:
- Webサイト上の単一または複数のファイルをまとめてダウンロードしたい:
wget
がシンプルで適しています。特にファイルリスト (-i
) やワイルドカード (-A
) を使う場合に便利です。 - Webサイト全体や特定のディレクトリ以下をまるごとローカルに複製したい(ミラーリング/アーカイブ):
wget
の再帰的ダウンロード機能 (-r
,--mirror
,-l
,-np
,-k
,-p
など) が非常に強力で、これを主な目的とするならwget
一択です。 - 大容量ファイルをダウンロードし、途中で中断されても再開したい:
wget -c
またはcurl -C -
どちらでも可能ですが、wget
がダウンロードに特化している分、関連オプションが豊富です。 - REST APIにアクセスしてデータを取得・送信したい:
curl
が適しています。POST/PUTなどのメソッドを使ったり、詳細なヘッダーを操作したり、レスポンスボディを柔軟に扱ったりする場合にcurl
の多機能性が活きます。 - FTP以外の多様なプロトコルでファイルを送受信したい:
curl
が適しています。 - ダウンロードの進捗をスクリプトで細かく制御したい、より低レベルなネットワーク操作を行いたい:
curl
の方がより詳細な制御が可能である場合があります。
どちらのコマンドも非常に便利で、目的によって使い分けることが推奨されます。相互に補完しあう関係と言えるでしょう。
9. まとめ
本記事では、コマンドラインからのファイルダウンロードツールである wget
コマンドについて、その基本的な使い方から、多様なオプションを使った応用、そして具体的な活用例に至るまで、詳細に解説しました。
wget
は、単に指定したURLからファイルをダウンロードするだけでなく、以下のような強力な機能を持っています。
- 非対話型: スクリプトに組み込んで自動化できる。
- 再帰的ダウンロード: Webサイトのミラーリングや特定コンテンツの一括取得が可能。
- レジューム機能: 中断されたダウンロードを効率的に再開できる。
- 豊富なオプション: ダウンロード対象の選択、速度制限、待機時間、認証、ヘッダー操作など、様々なニーズに柔軟に対応できる。
これらの機能を活用することで、手動では手間のかかる大量のファイルダウンロードや、定期的なデータ収集、Webサイトのアーカイブといった作業を効率的に行うことができます。
一方で、wget
の強力な機能は、誤った使い方をするとダウンロード元のサーバーに過度な負荷をかけてしまう可能性もはらんでいます。ダウンロード間の待機時間を設定する -w
オプションや、ダウンロード範囲を適切に制限するオプション (-l
, -np
, -A
, -R
, -D
など) を適切に使用し、ダウンロード先のサイトの robots.txt
を尊重するなど、常にサーバーへの配慮を忘れないことが重要です。
この記事で紹介したオプションや活用例は、wget
が持つ機能のほんの一部です。さらに詳細な情報や、ここでは紹介しきれなかった多くのオプションについては、man wget
コマンドを実行してマニュアルページを参照するか、GNU Wgetの公式ドキュメントを参照してください。
wget
コマンドをマスターすることで、あなたのコマンドラインでの作業効率は飛躍的に向上することでしょう。ぜひ、日々の業務や学習に役立ててください。
10. 付録/補足
10.1 .wgetrc 設定ファイル
wget
は、ユーザーのホームディレクトリにある .wgetrc
という設定ファイルから設定を読み込むことができます。よく使うオプション(例: デフォルトの待機時間、リトライ回数、プロキシ設定など)をこのファイルに記述しておくことで、コマンドラインで毎回オプションを指定する手間を省くことができます。
例:
“`text
~/.wgetrc の内容例
wait = 10
random-wait = on
tries = 5
limit-rate = 1m
restrict_file_names = windows # Windows互換のファイル名制限を適用
“`
これにより、wget URL
と実行するだけで、上記のオプションが常に適用されるようになります。
10.2 よくある質問 (FAQ)
- ダウンロードが途中で止まってしまいます。どうすればいいですか?
- ネットワーク接続が安定しているか確認してください。
-c
オプションを付けて再開を試みてください。- タイムアウト設定が短すぎるかもしれません。
-T
オプションでタイムアウト時間を長く設定してください。 - サーバー側で接続が切断されている可能性もあります。
--tries
オプションでリトライ回数を増やすことを検討してください。 - サーバー側の制限(例: 接続数の上限、帯域制限)にかかっている可能性もあります。
-w
や--limit-rate
オプションでアクセス頻度や速度を調整してみてください。
- Webページをダウンロードしたのに、画像やCSSが表示されません。
-p
(–page-requisites) オプションを付けて、ページ表示に必要なリソースもダウンロードするようにしてください。- ダウンロードしたHTMLファイル内のリンクがローカルファイルを参照するように変換されていません。
-k
(–convert-links) オプションを付けてください。再帰的にダウンロードする場合は-r -p -k
の組み合わせが一般的です。
- 再帰的ダウンロードで、親ディレクトリや意図しない外部サイトまでダウンロードされてしまいます。
-np
(–no-parent) オプションを付けて、親ディレクトリへの遡りを防いでください。-H
(–span-hosts) オプションを無闇に使わないでください。特定の外部ドメインへのリンクだけをたどりたい場合は、-H
と-D <許可ドメイン>
を組み合わせてください。- ダウンロードする深さを
-l <深さ>
で制限してください。
- ダウンロードしたファイル名が元のファイル名と異なります。
-O
オプションでファイル名を指定した場合は、その名前で保存されます。- サーバー側がContent-Dispositionヘッダーでファイル名を指定している場合、
wget
はそれに従うことがあります。 - ファイルシステムによっては、使用できない文字が自動的に変換される場合があります。
- ダウンロードしたファイルが0バイトになります。
- ダウンロードに失敗しているか、実際の内容が0バイトのファイルである可能性があります。詳細な出力を確認するため、
-v
オプションを付けて実行してみてください。 - 認証に失敗している、アクセスが拒否されている(403 Forbidden)、あるいはリソースが見つからない(404 Not Found)などのエラーが発生しているかもしれません。
- ダウンロードに失敗しているか、実際の内容が0バイトのファイルである可能性があります。詳細な出力を確認するため、
これで、wgetコマンドについての詳細な解説記事は完了です。約5000語の要件を満たすように記述しました。
はい、承知いたしました。wgetコマンドについて、約5000語の詳細な解説記事を作成します。以下が記事の内容です。
wgetコマンドとは?基本の使い方と活用例を徹底解説
インターネット上からファイルをダウンロードすることは、私たちのデジタルライフにおいて日常的な操作です。Webブラウザを使えば、クリック一つで簡単にファイルを入手できます。しかし、サーバー上にある多数のファイルを一括で取得したい場合、特定の条件に合致するファイルだけを選んでダウンロードしたい場合、あるいはダウンロード処理を自動化したい場合など、より高度なニーズに対応するにはどうすれば良いでしょうか?
そこで登場するのが、コマンドラインインターフェース(CUI)で動作する強力なダウンロードツール、wget
コマンドです。本記事では、この wget
コマンドについて、その「とは何か」という基本から、多岐にわたるオプションを使った応用、そして実際の活用例まで、約5000語にわたって徹底的に解説します。
1. はじめに:なぜwgetコマンドを学ぶのか?
インターネットは情報の宝庫であり、その情報の多くはファイルとして存在します。ドキュメント、画像、音声、動画, ソフトウェアの実行ファイル, データのアーカイブなど、私たちは日々様々な種類のファイルをネットワーク経由で取得しています。
通常、個人が手動でファイルをダウンロードする際には、Webブラウザが非常に便利です。リンクをクリックしたり、右クリックして「名前を付けてリンク先を保存」を選択したりするだけで、直感的に操作できます。
しかし、以下のようなケースでは、Webブラウザを使った手動操作は非効率的であったり、不可能であったりします。
- 大量のファイルをまとめてダウンロードしたい: Webサイト上の複数のファイル(例: シリーズ化されたレポート、ソフトウェアの各バージョン)を一つずつ手動でダウンロードするのは手間がかかります。
- 特定の条件に合うファイルだけをダウンロードしたい: 例えば、あるディレクトリにある全てのPDFファイルや画像ファイルだけをまとめて取得したい場合などです。
- ダウンロード処理を自動化したい: 定期的に更新されるデータファイルを毎日決まった時間にダウンロードする、といったタスクを自動的に実行したい場合です。cronなどのタスクスケジューラと組み合わせることで実現できます。
- サーバーへの負荷を考慮してダウンロードしたい: 短時間に大量のアクセスを集中させず、間隔を空けてダウンロードしたい場合があります。
- ダウンロード中にネットワークが切断されても、途中から再開したい: 大容量ファイルをダウンロードする際に、最初からやり直すことなく効率的に完了させたい要望です。
- コマンドライン環境で作業している: サーバー上で作業している場合など、GUI環境がない、あるいはGUIよりもCUIの方が都合が良い場合があります。
これらの高度なニーズに応えるための強力なツールが、今回解説する wget
コマンドです。wget
は、非対話型(ユーザーの操作を必要としない)で動作するため、スクリプトに組み込んで自動化したり、バックグラウンドで実行したりするのに非常に適しています。
この記事では、wget
コマンドのインストール方法から始め、最も基本的なファイルダウンロードの方法、そして大量のオプションを一つずつ丁寧に解説し、具体的な活用例を豊富に紹介します。これを読めば、あなたのファイルダウンロード作業が劇的に効率化されることでしょう。
2. wgetコマンドとは何か? その特徴と用途
wget
は、GNUプロジェクトによって開発されている、フリーでオープンソースのコマンドラインツールです。その名前は “World Wide Web Get” に由来し、主にWeb上(HTTP, HTTPSプロトコル)やFTPサーバーからファイルを非対話的に取得するために設計されています。
2.1 主な機能と特徴
wget
の主要な機能と特徴は以下の通りです。
- 複数のプロトコル対応: HTTP, HTTPS, FTPといった、インターネット上で広く使われているプロトコルに対応しています。
- 非対話型ダウンロード: ユーザーの操作なしに、コマンド一つでダウンロードを開始し、完了します。これにより、スクリプトやバッチ処理に組み込むことが容易になります。
- 再帰的ダウンロード: 指定したURLだけでなく、そこからリンクされている他のページやファイルも、設定した深さや条件に従って自動的にたどってダウンロードできます。これにより、Webサイトの一部または全体をミラーリング(ローカルに複製)することが可能です。
- ダウンロードの再開(レジューム機能): ネットワークエラーなどでダウンロードが中断されても、最初からやり直すのではなく、中断された時点からダウンロードを再開できます。これは大容量ファイルのダウンロードにおいて特に有用です。
- タイムスタンプによるダウンロード制御: ローカルにあるファイルよりもサーバー上のファイルが新しい場合にのみダウンロードする、といった制御が可能です。これにより、ファイルの同期を効率的に行えます。
- 帯域幅の制限: ダウンロード速度に上限を設定することで、ネットワーク帯域を占有しすぎないように調整できます。
- バックグラウンド実行: ダウンロード処理をバックグラウンドで実行させ、ターミナルを他の作業に使用できます。
- 認証への対応: HTTP基本認証など、パスワード保護されたリソースへのアクセスに対応しています。
- プロキシ対応: プロキシサーバー経由でのダウンロードが可能です。
- サーバー負荷への配慮: ダウンロード間の待機時間を設定したり、robots.txt ファイルを尊重したりすることで、ダウンロード元サーバーへの負荷を軽減する機能を持っています。(ただし、設定によってはサーバーに大きな負荷をかけることも可能です。)
2.2 なぜwgetが便利なのか?
Webブラウザでのダウンロードと比較して、wget
が優れている点はその「自動化」と「柔軟性」です。
- 自動化: 前述の通り、非対話型であるため、シェルスクリプトや他のプログラミング言語から簡単に呼び出すことができます。これにより、定期的なデータ収集やバックアップタスクを自動化できます。
- 柔軟性: 豊富なオプションを組み合わせることで、特定のファイルタイプのみをダウンロードしたり、特定のディレクトリ構造を維持したままダウンロードしたり、再帰的にサイト全体をダウンロードしたりと、様々なニーズに細かく対応できます。
- 効率性: レジューム機能やタイムスタンプによる制御により、ネットワーク障害が発生したり、既にダウンロード済みのファイルが存在したりする場合でも、無駄なく効率的に作業を完了できます。
- 移植性: Unix/Linux系のOSでは標準的に利用可能であるか、容易にインストールできます。macOSやWindowsでも利用でき、多くの環境で同じように動作します。
2.3 wgetとcurlの違いは?
wget
とよく比較されるコマンドに curl
があります。どちらもURLを指定してデータを取得するコマンドですが、設計思想や得意とする範囲が異なります。
- wget: 主に「ダウンロード」に特化しています。WebサイトやFTPサーバーからのファイル取得、再帰的なサイトのミラーリングなどに強みがあります。ダウンロード処理の自動化や効率化に必要な機能(再開、再帰、バックグラウンド実行など)が豊富です。
- curl: より多機能なデータ転送ツールです。HTTP, HTTPS, FTPだけでなく、SCP, SFTP, SMB, TELNET, DICTなど、より多くのプロトコルに対応しています。データの「送受信」が可能で、APIとの連携(POSTデータの送信など)やヘッダー情報の確認、デバッグなど、より幅広い用途に利用されます。wgetのような再帰的ダウンロード機能は標準では持っていません。
簡単に言うと、「ダウンロードして保存したいなら wget、様々なプロトコルでデータを送受信したいなら curl」 といった使い分けが一般的です。本記事は wget
に焦点を当てて解説を進めます。
3. wgetのインストール
wget
は多くのUnix/Linuxシステムに標準でインストールされているか、パッケージマネージャーを使って容易にインストールできます。macOSやWindowsでも利用可能です。
3.1 Linuxでのインストール
多くのLinuxディストリビューションでは、パッケージマネージャーを使って簡単にインストールできます。
- Debian/Ubuntu:
bash
sudo apt update
sudo apt install wget - Fedora/CentOS/RHEL/Rocky Linux/AlmaLinux:
bash
sudo dnf install wget
# または (古いOSの場合)
sudo yum install wget - Arch Linux:
bash
sudo pacman -S wget - openSUSE:
bash
sudo zypper install wget
インストール後、以下のコマンドでバージョン情報を確認できれば成功です。
bash
wget --version
3.2 macOSでのインストール
macOSにはデフォルトでは wget
がインストールされていませんが、Homebrewなどのパッケージマネージャーを使えば簡単にインストールできます。
Homebrewがインストールされていない場合は、公式サイト(https://brew.sh/index_ja)の手順に従ってインストールしてください。
Homebrewがインストールされていることを確認したら、以下のコマンドを実行します。
bash
brew install wget
インストール後、以下のコマンドでバージョン情報を確認できれば成功です。
bash
wget --version
3.3 Windowsでのインストール
Windowsには標準で wget
は含まれていません。利用するにはいくつかの方法があります。
- Windows Subsystem for Linux (WSL) を利用する: WSLをインストールすれば、Linux環境上で
wget
を使用できます。Linuxでのインストール手順を参照してください。これが最も簡単で推奨される方法です。 - Chocolatey パッケージマネージャーを利用する: Windows用のパッケージマネージャーであるChocolateyがインストールされている場合、以下のコマンドでインストールできます。
powershell
choco install wget - 公式ウェブサイトからバイナリをダウンロードする: GNU Wget for Windowsなどのプロジェクトからビルド済みの実行ファイル(.exe)をダウンロードし、環境変数
PATH
に追加するか、実行ファイルのあるディレクトリから使用します。非公式のビルドも多いため、信頼できるソースからダウンロードすることが重要です。
どの方法でインストールした場合でも、コマンドプロンプトまたはPowerShellで wget --version
を実行して確認できます。
4. wgetの基本的な使い方
wget
の最も基本的な使い方は、ダウンロードしたいファイルのURLを指定するだけです。
4.1 単一ファイルをダウンロードする
bash
wget https://example.com/files/document.pdf
このコマンドを実行すると、https://example.com/files/document.pdf
からファイルがダウンロードされ、現在のディレクトリに document.pdf
という名前で保存されます。
実行中、wget
はダウンロードの進行状況(ダウンロード済みのサイズ、現在の速度、完了予定時刻など)をプログレスバーとして表示します。
“`
–2023-10-27 10:00:00– https://example.com/files/document.pdf
Resolving example.com (example.com)… 93.184.216.34
Connecting to example.com (example.com)|93.184.216.34|:443… connected.
HTTP request sent, awaiting response… 200 OK
Length: 1234567 (1.2M) [application/pdf]
Saving to: ‘document.pdf’
document.pdf 100%[===================>] 1.18M 456KB/s in 2.6s
2023-10-27 10:00:03 (456 KB/s) – ‘document.pdf’ saved [1234567/1234567]
“`
ダウンロードが完了すると、'document.pdf' saved
のようなメッセージが表示されます。
4.2 保存するファイル名を指定する (-O オプション)
ダウンロードしたファイルを元のファイル名とは別の名前で保存したい場合は、-O
オプションを使用します。
bash
wget -O my_document.pdf https://example.com/files/document.pdf
このコマンドは、ダウンロードしたファイルを現在のディレクトリに my_document.pdf
という名前で保存します。
4.3 保存先ディレクトリを指定する (-P オプション)
ファイルを特定のディレクトリに保存したい場合は、-P
オプションを使用します。指定したディレクトリが存在しない場合は、自動的に作成されます。
bash
wget -P /path/to/destination https://example.com/files/document.pdf
このコマンドは、/path/to/destination
ディレクトリ内に document.pdf
という名前でファイルを保存します。
-O
オプションと -P
オプションは同時に使用することも可能ですが、その場合は -O
で指定したパスが完全な保存先となります(-P
は無視されます)。通常はどちらか片方、または両方を使わずにデフォルトの動作(現在のディレクトリに元のファイル名で保存)を利用します。
4.4 複数のファイルをダウンロードする
複数のファイルをまとめてダウンロードしたい場合は、単純に複数のURLを引数として指定します。
bash
wget https://example.com/files/file1.txt https://example.com/files/file2.zip https://example.com/images/image.jpg
このコマンドは、指定された3つのファイルを順番にダウンロードし、現在のディレクトリにそれぞれのファイル名で保存します。
URLが多い場合は、後述する -i
オプションを使って、ダウンロードしたいURLのリストをファイルに記述しておき、そのファイルを指定する方法が便利です。
5. wgetの主要オプションの詳細解説
wget
には非常に多くのオプションがあり、ダウンロードの挙動を細かく制御できます。ここでは、特によく使われる主要なオプションをカテゴリ別に分けて詳しく解説します。
5.1 ダウンロード制御に関するオプション
-O <ファイル名>
/--output-document=<ファイル名>
- ダウンロードしたデータを指定したファイル名で保存します。標準出力に出力したい場合は
-O -
と指定します(ただし、バイナリファイルの場合は注意が必要です)。 - 例:
wget -O latest_report.csv https://example.com/reports/current.csv
- このオプションは、ダウンロード元でのファイル名に関わらず、常に指定した名前で保存したい場合に便利です。例えば、動的なURL(例:
https://example.com/download?id=123
)からダウンロードしたファイルに分かりやすい名前を付けたい場合などに使われます。
- ダウンロードしたデータを指定したファイル名で保存します。標準出力に出力したい場合は
-P <ディレクトリ>
/--directory-prefix=<ディレクトリ>
- ダウンロードしたファイルを保存するディレクトリを指定します。指定したディレクトリが存在しない場合は作成されます。
- 例:
wget -P /tmp/downloads https://example.com/data.zip
- 複数のファイルを異なる場所からダウンロードして、まとめて特定のディレクトリに保存したい場合に有効です。再帰的ダウンロード時にも、ここで指定したディレクトリを基準にリモートのディレクトリ構造が再現されます。
-c
/--continue
- ダウンロードを中断された箇所から再開します。既に一部だけダウンロードされているファイルがある場合、サーバーがRangeリクエストに対応していれば、続きからダウンロードします。大容量ファイルのダウンロード時にネットワークが切断される可能性がある場合に必須のオプションです。
- 例:
wget -c https://example.com/large_file.tar.gz
- ダウンロード中に
Ctrl+C
で中断した場合や、ネットワーク障害で切断された場合など、再度同じコマンドに-c
を付けて実行すると、ダウンロードが途中から再開されます。これにより、時間を節約し、帯域幅の無駄をなくすことができます。 - 注: サーバー側がRangeリクエストに対応していない場合、このオプションは効果がありません。また、ローカルファイルがサーバー上のファイルより新しい場合や、ファイルサイズが異なる場合など、再開が適切に行えない場合もあります。
-N
/--timestamping
- ローカルに同じファイル名が存在する場合、サーバー上のファイルのタイムスタンプと比較し、サーバー上のファイルの方が新しい場合にのみダウンロードします。これにより、変更されていないファイルの再ダウンロードを避けて帯域幅を節約できます。ミラーリングなどで効率的にファイルを最新の状態に保ちたい場合に有用です。
- 例:
wget -N https://example.com/update.zip
- このオプションは、ローカルファイルとリモートファイルの更新日時を比較することで動作します。ローカルファイルが存在しない場合は通常通りダウンロードされます。ローカルファイルの方が新しいか、リモートファイルと同じタイムスタンプの場合はダウンロードされません。
--limit-rate=<速度>
- ダウンロードの速度を制限します。単位はバイト/秒で、キロバイト/秒 (k)、メガバイト/秒 (m)、ギガバイト/秒 (g) のサフィックスを使用できます(例:
--limit-rate=500k
,--limit-rate=2m
)。サーバーやネットワークに過度な負荷をかけたくない場合、あるいは他のネットワーク通信に影響を与えたくない場合に利用します。 - 例:
wget --limit-rate=2m https://example.com/video.mp4
- これは平均速度を制限するものであり、瞬間的な速度が指定値を超えることはあります。また、FTPダウンロードにはこのオプションは適用されません。
- ダウンロードの速度を制限します。単位はバイト/秒で、キロバイト/秒 (k)、メガバイト/秒 (m)、ギガバイト/秒 (g) のサフィックスを使用できます(例:
-i <ファイル>
/--input-file=<ファイル>
- ダウンロードしたいURLのリストが記述されたファイルを指定します。ファイルには1行につき1つのURLを記述します。空行や
#
で始まるコメント行は無視されます。大量のファイルをまとめてダウンロードしたい場合に非常に便利です。 - 例:
wget -i urls.txt
(urls.txt の内容例:http://example.com/file1.txt\nhttp://example.com/file2.txt
) - このオプションを使うと、非常に長いURLリストでもコマンドラインが複雑にならずに済み、また再利用も容易になります。標準入力からURLリストを読み込むには
-i -
と指定します。
- ダウンロードしたいURLのリストが記述されたファイルを指定します。ファイルには1行につき1つのURLを記述します。空行や
-nd
/--no-directories
- 再帰的ダウンロードを行う際に、リモートのディレクトリ構造を無視して、全てのファイルを指定したディレクトリ(デフォルトではカレントディレクトリ)直下に保存します。複数のURLから異なるパスのファイルをまとめてダウンロードし、一つのディレクトリに整理したい場合に有用です。ファイル名が重複する場合は、元のファイル名に
.N
(Nは数字) が付加されて保存されます。 - 例:
wget -r -nd https://example.com/data/files/
(files ディレクトリ内のファイルが全てカレントディレクトリに保存される) - このオプションは、特定のファイルタイプ(例: 全ての画像)をサイト全体から収集したい場合に
-A
オプションと組み合わせてよく使われます。
- 再帰的ダウンロードを行う際に、リモートのディレクトリ構造を無視して、全てのファイルを指定したディレクトリ(デフォルトではカレントディレクトリ)直下に保存します。複数のURLから異なるパスのファイルをまとめてダウンロードし、一つのディレクトリに整理したい場合に有用です。ファイル名が重複する場合は、元のファイル名に
-x
/--force-directories
- 再帰的ダウンロードを行わない場合でも、リモートのディレクトリ構造を強制的にローカルに作成してファイルを保存します。
-nd
とは逆の挙動です。例えば、wget https://example.com/data/files/document.pdf
は通常./document.pdf
として保存しますが、-x
を付けると./example.com/data/files/document.pdf
として保存されます。 - 例:
wget -x https://example.com/data/files/document.pdf
(./example.com/data/files/ ディレクトリを作成して保存) - このオプションは、ダウンロード元でのディレクトリ構造をそのままローカルに再現したい場合に便利です。
- 再帰的ダウンロードを行わない場合でも、リモートのディレクトリ構造を強制的にローカルに作成してファイルを保存します。
-nH
/--no-host-directories
- 再帰的ダウンロードを行う際に、ホスト名をディレクトリ名として使用しません。通常、
wget -r http://example.com/
とすると./example.com/
ディレクトリが作成され、その下にリモートのディレクトリ構造が再現されますが、このオプションを付けるとカレントディレクトリ直下にリモートのディレクトリ構造が作成されます。 - 例:
wget -r -nH https://example.com/data/
(./data/ ディレクトリを作成して保存) - 単一のホストからのみ再帰ダウンロードを行う場合や、ローカルにホスト名のディレクトリを作成したくない場合に有用です。
- 再帰的ダウンロードを行う際に、ホスト名をディレクトリ名として使用しません。通常、
--no-check-certificate
- HTTPSサイトにアクセスする際に、SSL/TLS証明書の検証を行いません。証明書エラーが発生する場合に一時的に利用できることがありますが、セキュリティリスクが非常に高いため、特別な理由がない限り使用すべきではありません。このオプションを使用すると、中間者攻撃などにより、意図しない悪意のあるコンテンツをダウンロードしてしまう可能性があります。自己署名証明書など、正当な理由で使用する場合でも、リスクを理解して自己責任で使用してください。
- 例:
wget --no-check-certificate https://intranet.internaldomain/secure_doc.pdf
- このオプションが必要になるほとんどの場合、より適切な対処法(例: 信頼できるCAから発行された証明書を使用する、自己署名証明書をクライアントのトラストストアに追加するなど)があります。
5.2 再帰的ダウンロードに関するオプション
wget
の最も強力な機能の一つが再帰的ダウンロードです。Webサイト全体や特定の部分をローカルにミラーリングするのに使われます。これらのオプションは通常 -r
オプションと組み合わせて使用します。
-r
/--recursive
- 再帰的ダウンロードを有効にします。指定したURLだけでなく、そこからリンクされている他のページやファイルも、設定した深さや条件に従って自動的にたどってダウンロードします。HTMLページ内のリンク(
<a>
タグのhref
属性など)だけでなく、画像(<img>
タグのsrc
属性)、スタイルシート(<link>
タグのhref
属性)、スクリプト(<script>
タグのsrc
属性)なども検出してダウンロード対象とすることができます(-p
オプションと組み合わせることで)。 - このオプションを使用する際は、意図しない大量のダウンロードやサーバーへの過負荷に注意が必要です。 無制限に再帰したり、外部サイトへのリンクを無制限にたどったりすると、制御不能になる可能性があります。
- 例:
wget -r https://example.com/docs/
(docs以下のページやファイルを再帰的にダウンロード、深さデフォルト5)
- 再帰的ダウンロードを有効にします。指定したURLだけでなく、そこからリンクされている他のページやファイルも、設定した深さや条件に従って自動的にたどってダウンロードします。HTMLページ内のリンク(
-l <深さ>
/--level=<深さ>
- 再帰の深さを制限します。
wget -r
はデフォルトでは深さ5まで再帰します。指定したURLを深さ0とし、そこからリンクをたどるたびに深さが1ずつ増えます。例えば-l 1
は指定したURLのページそのものと、そこから直接リンクされているページやファイルのみをダウンロードします。無制限に再帰したい場合は-l inf
または-l 0
を指定しますが、これは非常に危険な場合があるので注意が必要です。 - 例:
wget -r -l 2 https://example.com/
(指定URLからリンクを2階層下までたどる) - 深さを制限することで、再帰的ダウンロードの範囲を制御し、ダウンロード量や時間を予測可能にします。
- 再帰の深さを制限します。
-np
/--no-parent
- 再帰的ダウンロードにおいて、指定したURLのディレクトリより上の階層(親ディレクトリ)へのリンクをたどりません。例えば
wget -r https://example.com/data/files/
とした場合、files/ ディレクトリ内のページから /data/ や / のリンクがあったとしても、これらをたどりません。特定のサブディレクトリ以下のコンテンツだけをダウンロードしたい場合に、サイト全体に遡ってしまうのを防ぐために非常に重要なオプションです。 - 例:
wget -r -np https://example.com/data/files/
(filesディレクトリより上の階層には戻らない)
- 再帰的ダウンロードにおいて、指定したURLのディレクトリより上の階層(親ディレクトリ)へのリンクをたどりません。例えば
-k
/--convert-links
- ダウンロード完了後、ダウンロードしたHTMLファイル内のリンク(
<a>
タグのhref
属性、<img>
タグのsrc
属性、<link>
タグのhref
属性など)を、ダウンロードしたローカルファイルを参照するように変換します。例えば、リモートで/images/logo.png
だったリンクを、ローカルの./example.com/images/logo.png
を参照するように書き換えます。これにより、ダウンロードしたWebサイトをオフラインで閲覧した際に、ローカルのファイル間を正しくリンクで移動できるようになります。 - 例:
wget -r -k https://example.com/tutorial/
- このオプションは、再帰的ダウンロードでWebサイトをまるごとダウンロードし、ローカルで閲覧したい場合にほぼ必須です。
- ダウンロード完了後、ダウンロードしたHTMLファイル内のリンク(
-p
/--page-requisites
- HTMLファイルを表示するために必要な全ての要素(画像、CSSファイル、JavaScriptファイル、動画、音声など)をダウンロードします。通常、
wget
はHTMLファイル自体や明示的に指定したファイルしかダウンロードしませんが、このオプションを使うことで、ブラウザが表示する際に必要となる補助的なファイルもダウンロード対象に含めます。-k
オプションと組み合わせて使うことで、Webページを完全にオフラインで再現できます。 - 例:
wget -r -p -k https://example.com/article.html
- このオプションは、特定のページまたはサイト全体をオフラインで完全に閲覧可能な状態にしたい場合に不可欠です。
- HTMLファイルを表示するために必要な全ての要素(画像、CSSファイル、JavaScriptファイル、動画、音声など)をダウンロードします。通常、
-H
/--span-hosts
- 再帰的ダウンロードにおいて、元のホストと異なるホストへのリンクもたどります。通常、
wget -r https://example.com/
は example.com 内のリンクのみをたどり、example.net へのリンクは無視します。しかし、このオプションを有効にすると、example.net へのリンクもたどります。 - これは非常に危険なオプションです。 リンク先のサイト全体を意図せずダウンロードしてしまう可能性があります。特定の許可されたドメインリストと組み合わせて使用する場合(
-D
オプションと併用)などに限るべきです。 - 例:
wget -r -H -D example.net https://example.com/link_to_another_site.html
(example.com から example.net へのリンクはたどるが、それ以外のホストはたどらない)
- 再帰的ダウンロードにおいて、元のホストと異なるホストへのリンクもたどります。通常、
-D <ドメインリスト>
/--domains=<ドメインリスト>
- 再帰的ダウンロードにおいて、リンクをたどる対象のドメインをカンマ区切りで指定します。
-H
オプションを使う場合や、特定の関連サイトだけをダウンロードしたい場合に利用します。ここで指定したドメイン以外のホストへのリンクはたどりません。 - 例:
wget -r -H -D example.com,another-example.net https://example.com/
- このオプションは、再帰的ダウンロードの範囲を特定のサイト群に限定するために重要です。
- 再帰的ダウンロードにおいて、リンクをたどる対象のドメインをカンマ区切りで指定します。
-A <ファイル拡張子リスト>
/--accept=<ファイル拡張子リスト>
- ダウンロードするファイルの拡張子をカンマ区切りで指定します。リストの各項目は、特定の拡張子(例:
.pdf
)、またはワイルドカードを含むパターン(例:'*.jpg'
)です。特定の種類のファイルだけを収集したい場合に有用です。 - 例:
wget -r -np -A .pdf,.doc,.docx https://example.com/documents/
(documents以下のPDF, DOC, DOCXファイルのみダウンロード) - 例:
wget -r -A '*.jpg','*.png','*.gif' https://example.com/images/
(images以下全ての画像ファイルをダウンロード) - クォート(’ または “)を使用すると、シェルのワイルドカード展開を防ぐことができます。
- ダウンロードするファイルの拡張子をカンマ区切りで指定します。リストの各項目は、特定の拡張子(例:
-R <ファイル拡張子リスト>
/--reject=<ファイル拡張子リスト>
- ダウンロードしないファイルの拡張子をカンマ区切りで指定します。
-A
オプションの逆です。指定した拡張子を持つファイルはダウンロードされません。(例:exe,zip,tar.gz
)。 - 例:
wget -r -R .exe,.zip https://example.com/files/
(files以下からEXEとZIPファイルを除外してダウンロード) - ダウンロード不要な大きなファイルや実行ファイルをスキップしたい場合に便利です。
- ダウンロードしないファイルの拡張子をカンマ区切りで指定します。
--ignore-case
-A
や-R
オプションで指定したファイル拡張子や、ダウンロード対象のファイル名の比較において、大文字/小文字を区別しません。例えば、.JPG
と.jpg
を同じものとして扱います。ファイルシステムによっては大文字/小文字を区別しない場合があるため、このオプションを使うとより確実に指定できます。- 例:
wget -r -A jpg --ignore-case https://example.com/images/
(.jpg, .JPG, .jpG など、全てをダウンロード対象とする)
5.3 認証・HTTPヘッダーに関するオプション
--user=<ユーザー名>
/--password=<パスワード>
- HTTP基本認証やFTPログインに必要なユーザー名とパスワードを指定します。
- 例:
wget --user=myuser --password=mypassword https://example.com/private/data.zip
- 注: コマンドラインにパスワードを平文で記述するのは、コマンド履歴やpsコマンドなどで他のユーザーに見られてしまうセキュリティ上のリスクがあります。可能な場合は、パスワード入力を対話的に行う(プロンプトが表示される)か、
.netrc
ファイルを利用するなど、他の安全な方法を検討してください。
--auth-no-challenge
- NCSA認証が必要なサイトで、サーバーからの認証要求(challenge)を待たずに、すぐに認証情報を送ります。特定の認証方式で必要な場合があります。通常は不要です。
--header=<ヘッダー>
- HTTPリクエストにカスタムヘッダーを追加します。クッキーを送信したり、特定のUser-Agentを設定したりするのに使われます。ヘッダーは
"ヘッダー名: 値"
の形式で指定します。複数のヘッダーを追加したい場合は、このオプションを複数回指定します。 - 例:
wget --header="User-Agent: MyWgetBot/1.0" https://example.com/
(User-Agentヘッダーを変更) - 例:
wget --header="Cookie: sessionid=abcdef123456" https://example.com/restricted_page.html
(Cookieヘッダーを追加) - 特定のサイトへのアクセス制限を回避したり、スクレイピング元にツール名を伝えたり、ログインセッションを維持したりする場合などに利用されます。
- HTTPリクエストにカスタムヘッダーを追加します。クッキーを送信したり、特定のUser-Agentを設定したりするのに使われます。ヘッダーは
--referer=<URL>
- HTTPリクエストの
Referer
ヘッダーに指定したURLを含めます。一部のサイトでは、特定のRefererがないとファイルやリソースへのアクセスが制限される場合があります。 - 例:
wget --referer="https://example.com/index.html" https://example.com/download/file.zip
(example.com の index.html からリンクをたどってきたように見せかける)
- HTTPリクエストの
5.4 接続・タイムアウト・リトライに関するオプション
-T <秒>
/--timeout=<秒>
- 全てのネットワーク操作(DNSルックアップ、接続確立、データ受信)の総タイムアウト時間(秒)を設定します。指定した秒数内に操作が完了しない場合、エラーとなります。このオプションは、詳細なタイムアウト設定がない場合に便利です。
- 例:
wget -T 60 https://example.com/slow_server/data.zip
(総タイムアウトを60秒に設定)
--dns-timeout=<秒>
- DNS(ドメイン名からIPアドレスへの変換)ルックアップのタイムアウト時間(秒)を設定します。DNS解決に時間がかかる場合に調整します。
--connect-timeout=<秒>
- TCP接続の確立のタイムアウト時間(秒)を設定します。サーバーへの接続がなかなか確立できない場合に調整します。
--read-timeout=<秒>
- HTTPリクエストに対するサーバーからの応答待ち時間、またはデータ転送中のデータ受信間隔のタイムアウト時間(秒)を設定します。サーバーからの応答が遅い場合や、データ転送中に一時停止が頻繁に発生する場合に調整します。
--tries=<回数>
/--retries=<回数>
- ダウンロードに失敗した場合のリトライ回数を設定します。デフォルトは20回です。ダウンロード中にエラーが発生した場合、
wget
は指定された回数だけ同じURLへのアクセスを自動的に再試行します。無制限にリトライする場合はinf
または0
を指定します。ネットワークが不安定な場合に有用ですが、無制限のリトライはサーバーに負荷をかけ続ける可能性があるため注意が必要です。 - 例:
wget --tries=5 https://example.com/unstable_server/data.zip
(最大5回リトライ)
- ダウンロードに失敗した場合のリトライ回数を設定します。デフォルトは20回です。ダウンロード中にエラーが発生した場合、
-w <秒>
/--wait=<秒>
- 連続してファイルをダウンロードする際に、各ダウンロード間の待機時間(秒)を設定します。例えば再帰的ダウンロードを行う場合、一つのファイルのダウンロードが完了してから次のダウンロードを開始するまでの間隔を指定します。サーバーへの過負荷を防ぐために非常に重要なオプションです。特に大量のファイルを高速でダウンロードしようとするとサーバーに負担がかかるため、適切な待機時間を設けることがマナーとされています。
- 例:
wget -r -w 5 https://example.com/archive/
(各ファイルのダウンロード間に5秒待機)
--random-wait
-w
オプションで指定した待機時間を、0.5 * SEC から 1.5 * SEC の間のランダムな時間にします(SECは-w
で指定した秒数)。例えば-w 10 --random-wait
とすると、各ダウンロード間の待機時間が5秒から15秒の間でランダムに決定されます。これにより、機械的なアクセスパターンを避けることができ、サーバー側からボットと認識されにくくなります。サーバーへの負荷を分散する効果もあります。- 例:
wget -r -w 10 --random-wait https://example.com/archive/
(各ダウンロード間に5~15秒待機)
5.5 ログ・出力に関するオプション
-v
/--verbose
- 詳細な出力(ダウンロードの進行状況、HTTPヘッダー情報、エラーメッセージなど)を表示します。これが
wget
のデフォルトの動作です。 - 例:
wget -v https://example.com/test.html
(通常はこのオプションを明示する必要はありません)
- 詳細な出力(ダウンロードの進行状況、HTTPヘッダー情報、エラーメッセージなど)を表示します。これが
-q
/--quiet
- ほとんどの出力を抑制し、静かに動作します。ダウンロードの進行状況や詳細なメッセージは表示されず、エラーが発生した場合のみメッセージが出力されます。スクリプト内で実行し、通常は出力を表示したくない場合に有用です。
- 例:
wget -q https://example.com/data.zip
-o <ログファイル>
/--output-file=<ログファイル>
- 標準出力に表示されるメッセージ(進行状況、エラーなど)を、指定したログファイルに書き出します。ダウンロード中にターミナルを占有したくない場合や、バックグラウンドで実行する場合などにログを残しておきたい場合に便利です。既存のファイルは上書きされます。
- 例:
wget -o download.log https://example.com/large_file.tar.gz
--append-output=<ログファイル>
- ログを指定したファイルに追記します。
-o
は毎回ファイルを上書きしますが、こちらは既存のログファイルに新しいダウンロードセッションのログを追加します。複数のダウンロードセッションのログをまとめて管理したい場合に便利です。 - 例:
wget --append-output=download.log https://example.com/another_file.zip
- ログを指定したファイルに追記します。
--no-verbose
- デフォルトの詳細出力を抑制します。
-q
ほどではありませんが、冗長なメッセージを減らしたい場合に利用できます。進行状況バーなどは表示されます。
- デフォルトの詳細出力を抑制します。
--show-progress
- 詳細出力が抑制されている場合(例:
-q
または--no-verbose
を使用した場合)、プログレスバーのみを強制的に表示します。これにより、静かに実行しつつもダウンロードの進行状況は視覚的に把握できます。 - 例:
wget -q --show-progress https://example.com/very_large_file.iso
(ログは表示されないが、プログレスバーは表示される)
- 詳細出力が抑制されている場合(例:
5.6 その他のオプション
-b
/--background
- ダウンロード処理をバックグラウンドで実行します。コマンド実行後、すぐにプロンプトに戻ります。ダウンロードの進行状況や結果はログファイルに記録されます(
-o
オプションなどで指定しない場合は、デフォルトのログファイルwget-log
に出力されます。このファイルは~/.wget-log
などに作成されることがあります)。 - 例:
wget -b https://example.com/huge_archive.zip
- 長時間かかるダウンロード処理を邪魔にならないように実行したい場合に非常に便利です。バックグラウンドで実行されたジョブは
jobs
コマンドで確認し、fg
コマンドでフォアグラウンドに戻すことができます(シェルによる)。
- ダウンロード処理をバックグラウンドで実行します。コマンド実行後、すぐにプロンプトに戻ります。ダウンロードの進行状況や結果はログファイルに記録されます(
-B <URL>
/--base=<URL>
- 入力ファイル (
-i
オプションで指定) 内の相対URLを解決するためのベースURLを指定します。入力ファイルにsub/file.html
のような相対URLが記述されている場合、このオプションで指定したURLがその基準となります。入力ファイルに絶対URLと相対URLが混在している場合に有用です。 - 例:
wget -i list.txt -B https://example.com/data/
(list.txt に “file1.txt” と記述されている場合、https://example.com/data/file1.txt
として扱われる)
- 入力ファイル (
--mirror
- Webサイトのミラーリングに最適なオプションセット(
-r -l inf -N --no-host-directories
とほぼ同じ)を有効にします。再帰的に(-r
)、深さ無制限で(-l inf
)、タイムスタンプに基づいて最新のファイルのみをダウンロードし(-N
)、ホスト名のディレクトリを作成しません(--no-host-directories
)。加えて、-c --convert-links --adjust-extension --delete-after
といったオプションも有効になる場合があります(バージョンによる)。目的は、サイト全体をローカルに複製し、定期的に更新することです。 - 例:
wget --mirror https://example.com/
(example.com サイト全体をミラーリング) - 繰り返しになりますが、
--mirror
オプションは非常に強力であり、ダウンロード先のサイト全体をダウンロードしようとします。意図せず膨大な量のデータを取得したり、サーバーに過度な負荷をかけたりする可能性があります。 このコマンドを実行する前に、ダウンロード先のサイトの利用規約を確認し、必要であればサイト管理者の許可を得てください。また、ローカルディスクに十分な空き容量があることを確認し、必要に応じて-l
(深さ制限) や-R
(除外) などのオプションと組み合わせて、ダウンロード範囲を適切に制御することが強く推奨されます。
- Webサイトのミラーリングに最適なオプションセット(
--warc=<ファイル名>
/--warc-file=<ファイル名>
- ダウンロードしたコンテンツをWARC (Web ARChive) フォーマットのファイルに保存します。WARCファイルは、Webページのクロール結果をアーカイブするための標準フォーマットです。Webアーカイブを作成する際に利用されます。
- 例:
wget --warc=example_archive.warc https://example.com/
(example.com のトップページをクロールし、結果を WARC ファイルに保存) - 再帰的ダウンロードと組み合わせてサイト全体をWARCファイルにアーカイブすることも可能です。
wget -r --warc=example_site.warc https://example.com/
6. wgetの活用例
これまでに解説した基本的な使い方や様々なオプションを組み合わせることで、wget
は非常に多様な用途に活用できます。いくつかの具体的な例を見てみましょう。
6.1 例1:単一の大きなファイルをダウンロードし、中断されても再開する
大容量のファイルをダウンロード中にネットワークが不安定になったり、一時的にダウンロードを停止したりしたい場合があります。-c
オプションが役立ちます。
“`bash
ダウンロード開始
wget https://example.com/very/large/software_update.iso
…しばらくしてネットワークが切断されたり、Ctrl+Cで中断したりする…
ダウンロードを再開
wget -c https://example.com/very/large/software_update.iso
“`
最初のコマンドでダウンロードが始まり、中断された後、二番目のコマンドで中断された箇所から自動的にダウンロードが再開されます。プログレスバーも中断時点からの進行状況を表示します。この機能は、特に数ギガバイトやそれ以上のファイルをダウンロードする場合に非常に重要です。
6.2 例2:URLリストから複数のファイルをまとめてダウンロードする
ダウンロードしたいファイルのURLが多数ある場合、それらをテキストファイルにリストアップしておき、-i
オプションを使って一括でダウンロードできます。
まず、ダウンロードしたいURLを urls.txt
というファイルに記述します。1行につき1つのURLを記述します。コメント行 (#
から始まる行) や空行は無視されます。
“`text
urls.txt の内容例
https://example.com/data/file_001.csv
https://example.com/data/file_002.csv
レポートファイルもダウンロード
https://example.com/reports/latest.pdf
https://example.com/images/logo.png
“`
次に、以下のコマンドを実行します。
bash
wget -i urls.txt
これで、urls.txt
に記述された全てのファイルが現在のディレクトリにダウンロードされます。wget
はファイルをリストの順番にダウンロードします。エラーが発生したURLがあれば、エラーメッセージが表示され、スキップされるか、リトライ設定 (--tries
) に従って再試行されます。この方法は、手動で大量のリンクをクリックして保存するよりも格段に効率的です。
6.3 例3:Webサイトの一部(特定のディレクトリ以下)を再帰的にダウンロードする
特定のディレクトリ以下にある全てのファイルやページをダウンロードしたい場合は、-r
オプションと -np
オプションを組み合わせます。
bash
wget -r -np https://example.com/archive/2023/
このコマンドは、https://example.com/archive/2023/
ディレクトリ以下にあるコンテンツを再帰的にダウンロードしますが、/archive/
やそれより上の階層のリンクはたどりません。デフォルトの再帰深さ(通常5)が適用されます。ローカルには ./example.com/archive/2023/...
というディレクトリ構造が再現されます。
ホスト名のディレクトリを作成したくない場合は、-nH
オプションも追加します。
bash
wget -r -np -nH https://example.com/archive/2023/
これで ./archive/2023/...
という構造でダウンロードされます。ダウンロード深さを制限したい場合は -l
オプションを追加してください。例えば深さ3までなら wget -r -np -nH -l 3 https://example.com/archive/2023/
となります。
6.4 例4:オフライン閲覧用にWebページと必要な要素をダウンロードする
特定のWebページをオフラインで閲覧したい場合、そのHTMLファイルだけでなく、表示に必要な画像、スタイルシート、JavaScriptファイルなどもダウンロードする必要があります。また、ダウンロードしたHTMLファイル内のリンクをローカルファイルを参照するように書き換える必要があります。これには -p
オプションと -k
オプションを組み合わせます。
bash
wget -p -k https://example.com/useful_article.html
これにより、useful_article.html
ファイルと、そのページを表示するのに必要なリソース(画像、スタイルシート、スクリプトなど)がダウンロードされ、ローカルのファイル構造に保存されます。ダウンロード完了後、wget
はダウンロードしたHTMLファイル(例: ./example.com/useful_article.html
)を走査し、含まれるリンクをローカルのパスに変換します。例えば、リモートの <img src="/images/diagram.png">
は、ローカルの <img src="../images/diagram.png">
のように変換されます。これにより、ダウンロードした useful_article.html
をローカルでブラウザで開くと、リンクや画像などが正しく表示されるようになります。
特定のディレクトリ以下の複数のページとそれらに必要な要素を再帰的にダウンロードしたい場合は、-r
も組み合わせます。
bash
wget -r -p -k https://example.com/tutorial/
この場合も、意図しない深さまでダウンロードが進まないように -l
や -np
オプションと組み合わせることを検討してください。例えばチュートリアル全体を深さ2までダウンロードするなら wget -r -l 2 -p -k https://example.com/tutorial/
となります。
6.5 例5:特定の種類のファイル(例: PDFファイル)だけをまとめてダウンロードする
あるURL以下(またはサイト全体)から、特定の拡張子を持つファイルだけをまとめてダウンロードしたい場合は、-r
と -A
オプションを組み合わせます。
bash
wget -r -np -A .pdf https://example.com/documents/
このコマンドは、https://example.com/documents/
ディレクトリ以下を再帰的にたどり(-r
)、親ディレクトリには戻らず(-np
)、拡張子が .pdf
のファイルだけをダウンロードします(-A .pdf
)。ローカルには ./example.com/documents/...
のディレクトリ構造が再現され、PDFファイルのみが保存されます。
複数の拡張子を指定する場合はカンマ区切りで指定します。ワイルドカードも使用可能です。
“`bash
wget -r -np -A .jpg,.png,.gif https://example.com/images/
またはワイルドカードを使って同じ意味
wget -r -np -A ‘.jpg’,’.png’,’*.gif’ https://example.com/images/
“`
ダウンロードしたファイルを全て一つのディレクトリにまとめたい場合は、-nd
オプションを追加します。
bash
wget -r -np -nd -A .pdf https://example.com/documents/
これで、検出された全てのPDFファイルがカレントディレクトリ直下に保存されます。ファイル名が重複する場合は自動的にリネームされます。
6.6 例6:認証が必要なページからファイルをダウンロードする
Basic認証などで保護されたページからファイルをダウンロードするには、--user
と --password
オプションを使用します。
bash
wget --user=private_user --password=secret_pass https://example.com/restricted/secret_file.zip
wget
は指定されたユーザー名とパスワードをHTTP Basic認証ヘッダーとして送信します。FTPサーバーへのログインにも同じオプションを使用できます。
注意: コマンドラインにパスワードを平文で記述すると、コマンド履歴やpsコマンドなどで他のユーザーに見られてしまう可能性があるため、セキュリティ上のリスクがあります。可能であれば、以下のようなより安全な方法を検討してください。
- 対話的なパスワード入力:
--ask-password
オプションを使用すると、パスワードの入力を求められます。ただし、これはHTTP Basic認証では機能しません。FTPなどの一部プロトコルで利用可能です。 .netrc
ファイル: FTPやHTTP認証の情報を.netrc
ファイルに記述しておくことで、コマンドラインにパスワードを表示せずに済みます。.netrc
ファイルはホームディレクトリに置き、他のユーザーから読み書きできないようにパーミッションを適切に設定(例:chmod 600 ~/.netrc
)する必要があります。ファイルの形式はmachine <hostname> login <username> password <password>
です。.wgetrc
ファイル:.wgetrc
ファイルにpassword=
を記述することも可能ですが、こちらも平文で保存されるためリスクがあります。- スクリプトでの工夫: パスワードを環境変数として渡し、コマンドラインに直接記述しないようにするなど、スクリプト側でセキュリティを考慮した実装を行う。
6.7 例7:ダウンロード速度を制限してサーバー負荷を軽減する
短時間に大量のファイルをダウンロードすると、ダウンロード元のサーバーに大きな負荷をかける可能性があります。これはサービス妨害(DoS)と見なされることもあります。--limit-rate
オプションで速度を制限したり、-w
オプションでダウンロード間に待機時間を設けたりすることで、サーバーへの影響を抑えることができます。
“`bash
ダウンロード速度を 500KB/s に制限
wget –limit-rate=500k https://example.com/large_dataset.tar.gz
再帰的ダウンロードで、各ファイルのダウンロード間に最低でも5秒待機する
wget -r -w 5 https://example.com/public/archive/
再帰的ダウンロードで、各ファイルのダウンロード間に10秒~30秒のランダムな待機時間を設ける
wget -r -w 20 –random-wait https://example.com/public/archive/
“`
-w
オプションと --random-wait
の組み合わせは、連続アクセスによるサーバーへの負荷を分散し、機械的なアクセスパターンを避けることで、サーバー側からボットと認識されにくくする効果も期待できます。公共のサーバーや、頻繁にアクセスするサーバーからダウンロードする場合は、これらのオプションを使用してサーバーに配慮することが推奨されます。
6.8 例8:HTTPヘッダーを操作してダウンロードする
特定のUser-Agentを偽装したり、Cookieを送信したりしてダウンロードしたい場合があります。これは、サイトが特定のUser-Agentからのアクセスを許可していたり、Cookieによってログイン状態を維持する必要があったりする場合に必要になります。--header
オプションを使用します。
“`bash
User-Agentを一般的なブラウザに見せかける
wget –header=”User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3″ https://example.com/some_resource.html
Cookieを送信する(事前にCookieを取得している必要がある)
wget –header=”Cookie: sessionid=abcdef123456; auth_token=xyz789″ https://example.com/members_only_file.pdf
“`
これらのテクニックは、正規の利用者としてダウンロードする場合などに役立つことがありますが、サイトの利用規約に反しないか確認することが重要です。サイトによっては、特定のヘッダーがないとアクセスが拒否されたり、誤ったコンテンツが返されたりすることもあります。
6.9 例9:バックグラウンドでダウンロードを実行し、ログに記録する
大容量ファイルのダウンロードなど、完了までに時間がかかる処理をバックグラウンドで実行し、プロンプトを解放したい場合は、-b
オプションを使用します。通常、バックグラウンド実行の結果やエラーを確認するために、-o
または --append-output
オプションでログファイルへの出力を指定します。
“`bash
wget -b -o huge_download.log https://example.com/very/large/archive.zip
コマンド実行後、すぐにプロンプトに戻る。以下のようなメッセージが表示される。
Continuing in background, pid 12345.
Output will be written to ‘huge_download.log’.
“`
ダウンロードはバックグラウンドプロセスとして実行され、ターミナルはすぐに次のコマンドを受け付けられる状態になります。ダウンロードの進行状況や結果は huge_download.log
ファイルに記録されます。ログファイルを確認することで、ダウンロードが正常に完了したか、エラーが発生していないかなどを確認できます。
6.10 例10:ミラーリングモードでサイト全体をダウンロードする(注意!)
--mirror
オプションは、Webサイト全体をローカルに複製する(ミラーリング)ためのショートカットです。これは -r -l inf -N --no-host-directories
オプション群とほぼ同等であり、加えて -c --convert-links --adjust-extension --delete-after
といったオプションも自動的に有効になることが多いです。目的は、サイト全体をローカルに複製し、定期的に更新することでオフラインで閲覧できるようにすることです。
bash
wget --mirror https://example.com/
このコマンドは、example.com サイトを再帰的に、深さ無制限で、タイムスタンプに基づいて差分更新しながら、ホスト名のディレクトリを作成せずにダウンロードします。リンクはローカル参照に変換され、ファイル名に拡張子がない場合は適切な拡張子が追加され、古いファイルは削除される場合があります。
繰り返しになりますが、--mirror
オプションは非常に強力であり、ダウンロード先のサイト全体をダウンロードしようとします。意図せず膨大な量のデータを取得したり、サーバーに過度な負荷をかけたりする可能性があります。 このコマンドを実行する前に、ダウンロード先のサイトの利用規約を確認し、必要であればサイト管理者の許可を得てください。また、ローカルディスクに十分な空き容量があることを確認し、必要に応じて -l
(深さ制限) や -R
(除外), -A
(許可) などのオプションと組み合わせて、ダウンロード範囲を適切に制御することが強く推奨されます。サイトによっては、ミラーリングを検出してアクセスをブロックする場合もあります。
7. 注意点とトラブルシューティング
wget
は強力なツールですが、使用方法によっては意図しない結果を招いたり、問題が発生したりすることもあります。一般的な注意点とトラブルシューティングについて解説します。
7.1 サーバー負荷への配慮
特に再帰的ダウンロードや大量のファイルをダウンロードする場合、短時間に多数のリクエストを送信することになります。これはダウンロード元のサーバーに大きな負荷をかける可能性があります。
-w
(待機時間) オプションを利用する: ダウンロード間に適切な待機時間(例: 数秒)を設けることで、サーバーへのリクエスト頻度を下げられます。ランダムな待機時間を設定する--random-wait
も組み合わせると、アクセスがより分散されます。これはサーバーへの負荷を軽減する最も基本的なマナーです。--limit-rate
(速度制限) オプションを利用する: ダウンロード速度を制限することで、サーバーの帯域幅を占有しすぎるのを防ぎます。特に共有ホスティング環境など、帯域幅が限られている可能性のあるサーバーからのダウンロード時に有効です。robots.txt
を尊重する: 多くのWebサイトは、クローラーなどの自動ツールにアクセスを制限するためのrobots.txt
ファイルを置いています。wget
はデフォルトでrobots.txt
を尊重し、許可されていないリソースへのアクセスを避けます。特別な理由がない限り、--execute robots=off
のようなrobots.txt
の尊重を無効にするオプションは使用すべきではありません。サイトのポリシーに従うことは重要です。- ダウンロード範囲を適切に制限する:
-l
(再帰深さ),-np
(親ディレクトリをたどらない),-A
(許可拡張子),-R
(拒否拡張子),-D
(許可ドメイン) などのオプションを適切に利用し、必要なリソースのみをダウンロードするようにします。無制限のダウンロードは、サーバーだけでなく自身のローカルディスク容量もあっという間に使い果たしてしまう可能性があります。
ダウンロード先のサイト管理者の立場になって、自分のダウンロード行為がどのような影響を与えるかを常に意識することが重要です。許可なく大量のデータやサイト全体をダウンロードする行為は、サービス利用規約違反にあたる可能性があり、DoS攻撃と見なされIPアドレスがブロックされる可能性もあります。
7.2 ディスク容量の確認
特に再帰的ダウンロードや大きなファイルをダウンロードする場合、ローカルディスクの容量を大量に消費する可能性があります。ダウンロードを開始する前に、十分な空き容量があるか確認してください。ダウンロード中に容量不足になると、エラーで中断されます。大きなサイトをミラーリングする前に、大まかなサイズを見積もるか、テスト実行で一部だけダウンロードしてみるなどの対策が有効です。
7.3 再帰的ダウンロードの注意点
- 無限ループ: Webサイトの構造によっては、リンクをたどり続けることで無限ループに陥る可能性があります。例えば、ページAからページBにリンクがあり、ページBからページAにリンクがある、といった構造です。
-l
で深さを制限したり、-np
で親ディレクトリへの遡りを防いだりすることで、このような状況を回避できます。wget
は既にダウンロードしたURLを記憶しているため、単純なループには強いですが、複雑な構造では意図しない挙動になることもあります。 - 意図しないサイトへの遷移:
-H
オプションを使用したり、他のホストへのリンクを含むページを再帰的にダウンロードしたりする場合、意図しない全く別のサイトに移動してしまい、そのサイトまでダウンロードしてしまう可能性があります。-D
オプションでダウンロード対象ドメインを厳密に指定することが重要です。許可されていないサイトをクロールすることは避けてください。 - 動的なコンテンツ: Webサイトの中には、アクセスするたびに内容が変化する動的なページ(例: 検索結果ページ)や、無限にページを生成するような構造を持つものがあります。このようなサイトに対して再帰的ダウンロードを行うと、予期しない挙動になったり、膨大な量のデータをダウンロードしてしまったりする可能性があります。再帰的ダウンロードは、比較的静的なコンテンツを持つサイトや、アーカイブ目的で利用するのが適しています。
- セッションや状態の管理: ログインが必要なサイトや、セッションに状態を持つサイトに対して再帰的ダウンロードを行う場合、単純な
wget -r
ではログイン状態が維持されず、期待したコンテンツがダウンロードできないことがあります。Cookieを管理したり、認証情報を適切に渡したりする必要がありますが、これは複雑になる場合があります(例:--load-cookies
,--save-cookies
オプションや--header "Cookie: ..."
オプションを利用する)。
7.4 SSL/TLS証明書エラー
HTTPSサイトにアクセスする際に、証明書の期限切れ、ホスト名の不一致、自己署名証明書などにより証明書エラーが発生することがあります。デフォルトでは、wget
は証明書が検証できないHTTPSサイトからのダウンロードを拒否し、エラーメッセージ(例: ERROR: cannot verify example.com's certificate ...
)を表示して終了します。
エラーを無視してダウンロードを進めたい場合は --no-check-certificate
オプションを使用できますが、これは中間者攻撃などのセキュリティリスクを高める行為であり、非常に危険です。このオプションを使用する前に、そのリスクを十分に理解し、本当に信頼できるサーバーに対してのみ使用してください。正当な理由(例: 内部ネットワークのサーバーで自己署名証明書を使用している場合など、サーバーの信頼性が確認できる状況)がない限り、使用は避けるべきです。
正当な証明書エラーの場合は、以下の点を確認してください。
- クライアントOSのシステム時刻が正確か(時刻のずれが証明書エラーの原因になることがあります)。
- クライアントOSのルート証明書ストアが最新か。古い証明書ストアでは、新しいCAが発行した証明書を検証できないことがあります。
wget
のバージョンが古い場合、新しい証明書タイプやTLSバージョンに対応していない可能性がないか。- プロキシサーバーを使用している場合、プロキシが証明書の検証に影響を与えていないか。
7.5 403 Forbidden / 404 Not Found エラー
ダウンロードしようとしたURLに対して、これらのHTTPステータスコードが返されることがあります。
- 404 Not Found: 指定したURLのリソースが見つかりません。URLが間違っている、ファイルが移動されたか削除された、リンクが切れているなどの可能性があります。URLを正確に確認してください。
- 403 Forbidden: リソースへのアクセスが拒否されました。
- アクセス制限がかかっている可能性があります。認証が必要な場合は
--user
/--password
や--header "Cookie: ..."
を試す必要があるかもしれません。 - User-Agentによってアクセスが拒否されている可能性があります。
--header "User-Agent: ..."
で一般的なブラウザのUser-Agentを偽装してみることでアクセスできるようになる場合があります(ただし、サイトのポリシー違反にならないか確認してください)。 robots.txt
によってアクセスが禁止されているパスかもしれません(wget
はデフォルトで尊重)。- ダウンロード元サーバー側でのIPアドレス制限、地理的な制限、またはその他のセキュリティ設定による可能性もあります。サーバーの管理者にお問い合わせください。
- 短時間に大量のリクエストを送信した結果、一時的にアクセスがブロックされた可能性もあります。しばらく待ってから、
-w
や--limit-rate
オプションを付けて再試行してみてください。
- アクセス制限がかかっている可能性があります。認証が必要な場合は
エラーメッセージをよく確認し、原因を特定して対処してください。必要であれば、Webブラウザで同じURLにアクセスして、アクセス可能か、表示されるエラーメッセージは何かなどを確認するとヒントになります。
7.6 タイムアウトや接続エラー
ダウンロード中に接続が切断されたり、サーバーからの応答がなくなったりする場合があります。
-c
オプションで再開を試みてください。これが最も簡単な対処法です。--tries
オプションで自動リトライ回数を増やすことで、一時的なネットワークの問題に対して強くなります。-T
オプション(または--connect-timeout
,--read-timeout
)でタイムアウト時間を長く設定することで、応答が遅いサーバーでもエラーになりにくくなります。- お使いのネットワーク接続が安定しているか確認してください。
- ファイアウォールなどが
wget
の通信をブロックしていないか確認してください。
8. wgetとcurlの比較(再訪)
前述の通り、wget
と curl
は似ているようで異なるツールです。改めて、その違いと使い分けについてまとめます。
特徴/機能 | wget | curl |
---|---|---|
主な用途 | ファイルのダウンロード、Webサイトのミラーリング | データ転送(送受信)、API連携、デバッグ |
非対話型 | ○ (デフォルト) | ○ (デフォルト) |
対応プロトコル | HTTP, HTTPS, FTP | HTTP, HTTPS, FTP, SFTP, SCP, SMB, TELNET, DICT, LDAP, etc. (多数) |
ダウンロード再開 | ○ (-c オプション) | ○ (-C – オプション) |
再帰的ダウンロード | ○ (-r オプション、豊富なオプション) | × (基本的に非対応、外部スクリプトで実現) |
ダウンロード速度制限 | ○ (–limit-rate) | ○ (–limit-rate) |
バックグラウンド実行 | ○ (-b オプション) | △ (OSのバックグラウンド実行機能を利用する必要がある) |
認証対応 | HTTP基本認証, FTP | HTTP基本認証, Digest認証, NTLM認証など、多様な認証方式 |
HTTPヘッダー操作 | ○ (–header) | ○ (-H オプション、詳細な制御が可能) |
POST/PUT等の送信 | × (データを送信する機能は基本なし) | ○ (-X POST など、データ送信が可能) |
標準出力への出力 | -O – で可能(主にファイル保存) | ○ (デフォルトの動作、パイプ処理に便利) |
インストール | Linux標準が多い、Homebrew等で容易 | Linux標準が多い、Homebrew等で容易 |
エラー処理 | 終了コードやログで判断 | 終了コードやstderrへの出力で判断、詳細なデバッグ情報 (-v/-L/-Iなど) |
使い分けの指針:
- Webサイト上の単一または複数のファイルをまとめてダウンロードしたい:
wget
がシンプルで適しています。特にファイルリスト (-i
) やワイルドカード (-A
) を使う場合に便利です。再開機能も使いやすいです。 - Webサイト全体や特定のディレクトリ以下をまるごとローカルに複製したい(ミラーリング/アーカイブ):
wget
の再帰的ダウンロード機能 (-r
,--mirror
,-l
,-np
,-k
,-p
など) が非常に強力で、これを主な目的とするならwget
一択です。 - 大容量ファイルをダウンロードし、途中で中断されても再開したい:
wget -c
またはcurl -C -
どちらでも可能ですが、wget
がダウンロードに特化している分、関連オプションが豊富です。 - REST APIにアクセスしてデータを取得・送信したい:
curl
が適しています。POST/PUTなどのメソッドを使ったり、詳細なヘッダーを操作したり、レスポンスボディを柔軟に扱ったりする場合にcurl
の多機能性が活きます。 - FTP以外の多様なプロトコルでファイルを送受信したい(例: SFTPでファイルをアップロードしたい):
curl
が適しています。 - ダウンロードしたデータの内容を直接、標準出力やパイプに渡して他のコマンドで処理したい:
curl
はデフォルトで標準出力に出力するため、パイプ処理に便利です。wget
でも-O -
で可能ですが、エラーメッセージなども標準出力に出力されるため注意が必要です。 - Webサイトのデバッグやヘッダー情報の確認を行いたい:
curl -I URL
(ヘッダーのみ) やcurl -v URL
(詳細情報) のように、curl
にはデバッグに便利なオプションが豊富です。
どちらのコマンドも非常に便利で、目的によって使い分けることが推奨されます。相互に補完しあう関係と言えるでしょう。両方のコマンドの使い方を習得しておくことで、様々なデータ取得タスクに対応できるようになります。
9. まとめ
本記事では、コマンドラインからのファイルダウンロードツールである wget
コマンドについて、その基本的な使い方から、多様なオプションを使った応用、そして具体的な活用例に至るまで、詳細に解説しました。
wget
は、単に指定したURLからファイルをダウンロードするだけでなく、以下のような強力な機能を持っています。
- 非対話型: ユーザーの操作なしにダウンロードを実行し、スクリプトに組み込んで自動化できる。
- 再帰的ダウンロード: Webサイトのミラーリングや特定コンテンツの一括取得が可能。深度制限、対象・除外ファイルタイプの指定など、細かな制御ができる。
- レジューム機能: ネットワークエラーなどで中断されたダウンロードを効率的に途中から再開できる。
- 豊富なオプション: ダウンロード対象の選択、保存先の指定、速度制限、ダウンロード間の待機時間、認証、カスタムヘッダーの追加など、様々なニーズに柔軟に対応できる。
- ログ機能: 実行結果やエラーをファイルに記録し、バックグラウンド実行時でも状況を把握できる。
これらの機能を活用することで、手動では手間のかかる大量のファイルダウンロードや、定期的なデータ収集、Webサイトのアーカイブといった作業を効率的に行うことができます。特にWebサイトの再帰的な取得に関しては、wget
の右に出るものはないと言えるほど強力で、多くのオプションが提供されています。
一方で、wget
の強力な機能は、誤った使い方をするとダウンロード元のサーバーに過度な負荷をかけてしまう可能性もはらんでいます。ダウンロード間の待機時間を設定する -w
オプションや、ダウンロード範囲を適切に制限するオプション (-l
, -np
, -A
, -R
, -D
など) を適切に使用し、ダウンロード先のサイトの robots.txt
を尊重するなど、常にサーバーへの配慮を忘れないことが重要です。インターネット上のリソースを共有する一員として、責任ある利用を心がけましょう。
この記事で紹介したオプションや活用例は、wget
が持つ機能の網羅的なリストではありませんが、日常的な用途や、より高度な自動化タスクで特によく使用される重要な要素をカバーしています。さらに詳細な情報や、ここでは紹介しきれなかった多くのオプションについては、man wget
コマンドを実行してマニュアルページを参照するか、GNU Wgetの公式ドキュメントを参照してください。マニュアルページは wget
の全ての機能が詳細に記述された、最も信頼できる情報源です。
wget
コマンドをマスターすることで、あなたのコマンドラインでの作業効率は飛躍的に向上することでしょう。ファイルダウンロードの自動化、データ収集、Webサイトのオフライン閲覧など、様々な場面でその強力なツールをぜひ、日々の業務や学習に役立ててください。
10. 付録/補足
10.1 .wgetrc 設定ファイル
wget
は、起動時にユーザーのホームディレクトリにある .wgetrc
という名前の設定ファイル、またはシステム全体の /etc/wgetrc
ファイルから設定を読み込むことができます。よく使うオプション(例: デフォルトの待機時間、リトライ回数、プロキシ設定、User-Agentなど)をこのファイルに記述しておくことで、コマンドラインで毎回オプションを指定する手間を省き、wgetのデフォルト挙動をカスタマイズすることができます。
.wgetrc
ファイルはシンプルなテキストファイルで、各行にオプション名とその値を記述します。コメントは #
で始まります。オプション名はコマンドラインで使う長いオプション名(--wait
, --tries
など)から先頭の --
を取り、ハイフンをアンダースコアに置き換えた形式(wait
, tries
など)で記述します。真偽値を取るオプション(例: --recursive
)は on
または off
で指定します。
例:
“`text
~/.wgetrc の内容例
各ダウンロード間に最低10秒待機する
wait = 10
待機時間をランダムにする
random-wait = on
リトライ回数を5回に設定
tries = 5
ダウンロード速度を1MB/sに制限
limit-rate = 1m
Windows互換のファイル名制限を適用(特殊文字を避ける)
restrict_file_names = windows
常にUser-Agentヘッダーを送信する
user_agent = “MyCustomWgetBot/1.1”
常にrobots.txtを尊重する(デフォルトだが明示的に記述)
robots = on
“`
この設定ファイルを作成しておけば、例えば wget -r https://example.com/archive/
と実行するだけで、上記の wait
, random-wait
, tries
, restrict_file_names
, user_agent
, robots
の設定が自動的に適用されます。コマンドラインで同じオプションを指定した場合は、コマンドラインの設定が優先されます。
10.2 よくある質問 (FAQ)
- ダウンロードが途中で止まってしまいます。どうすればいいですか?
- ネットワーク接続が安定しているか確認してください。Wi-Fiの電波が弱い、有線LANケーブルが抜けているなど、物理的な問題の可能性があります。
-c
オプションを付けて同じコマンドを再実行してみてください。サーバーがRangeリクエストに対応していれば、中断した箇所からダウンロードが再開されます。- タイムアウト設定が短すぎるかもしれません。
-T
オプションでタイムアウト時間(秒)を長く設定してみてください。サーバーからの応答やデータ受信が遅い場合に効果があります。 - サーバー側で接続が切断されている可能性もあります。
--tries
オプションで自動リトライ回数を増やすことを検討してください。一時的なサーバーの不調やネットワークのゆらぎに対応できます。 - サーバー側の制限(例: 接続数の上限、帯域制限、一定時間内のリクエスト数の上限)にかかっている可能性もあります。
-w
や--limit-rate
オプションでアクセス頻度や速度を調整してみてください。エラーメッセージにヒントが含まれているかもしれません。 - ファイアウォールやセキュリティソフトが
wget
の通信をブロックしている可能性がないか確認してください。
- Webページをダウンロードしたのに、画像やCSSが表示されません。
- 通常、
wget
はHTMLファイルそのものだけをダウンロードします。ページを表示するのに必要な画像、スタイルシート、JavaScriptファイルなどは別途ダウンロードする必要があります。-p
(–page-requisites) オプションを付けて、ページ表示に必要なリソースもダウンロードするようにしてください。 - ダウンロードしたHTMLファイル内のリソースへのリンクが、ローカルファイルを参照するように変換されていません。
-k
(–convert-links) オプションを付けてください。ダウンロード完了後、wget
はHTMLファイルを走査し、リモートURLをローカルパスに書き換えます。再帰的にサイトをオフライン閲覧用にダウンロードする場合は-r -p -k
の組み合わせが一般的です。 - オリジナルのページが、JavaScriptを使って動的にコンテンツ(画像など)を読み込んでいる場合、単純な
wget
ではそれらのコンテンツを取得できないことがあります。wget
は基本的にHTMLソースを解析する静的なクローラーであり、ブラウザのようにJavaScriptを実行する機能は持っていません。
- 通常、
- 再帰的ダウンロードで、親ディレクトリや意図しない外部サイトまでダウンロードされてしまいます。
- 指定したURLのディレクトリより上の階層へのリンクをたどってしまっている可能性があります。
-np
(–no-parent) オプションを付けて、親ディレクトリへの遡りを防いでください。例えば/data/files/
の内容をダウンロードしたい場合に、/data/
や/
へのリンクをたどらないようにします。 - 元のホストとは異なるホストへのリンクをたどってしまっている可能性があります。
-H
(–span-hosts) オプションを無闇に使わないでください。特定の外部ドメインへのリンクだけをたどりたい場合は、-H
と-D <許可ドメインリスト>
を組み合わせて、許可するドメインを明示的に指定してください。 - ダウンロードする深さを
-l <深さ>
で制限してください。これにより、現在のURLから何階層下までリンクをたどるかを制御できます。
- 指定したURLのディレクトリより上の階層へのリンクをたどってしまっている可能性があります。
- ダウンロードしたファイル名が元のファイル名と異なります。
-O
オプションでファイル名を指定した場合は、その名前で保存されます。- サーバー側がHTTPヘッダーの
Content-Disposition
フィールドでファイル名を指定している場合、wget
はそれに従うことがあります。 - 再帰的ダウンロード時に
-nd
(–no-directories) オプションを使用した場合、ファイル名が重複すると自動的に連番 (.1
,.2
など) が付加されます。 - ファイルシステムによっては、リモートのファイル名に使用されている特殊文字がローカルのファイル名として使用できないため、
wget
が自動的に安全な文字に変換したり、ファイル名に制限を加えたりすることがあります。restrict_file_names
設定を確認してください。 - WebサーバーがURLの末尾以外にファイル名を指定している場合(例:
https://example.com/download?file=report.pdf
)、wget
はデフォルトではURLの最後のセグメント(この例ではdownload?file=report.pdf
)をファイル名として使用しようとします。この場合は-O report.pdf
のように明示的にファイル名を指定する必要があります。
- ダウンロードしたファイルが0バイトになります。
- ダウンロード自体がエラーで完了しているか、実際の内容が0バイトのファイルである可能性があります。詳細な出力を確認するため、
-v
オプションを付けて実行してみてください。エラーメッセージが表示されないか確認します。 - 認証に失敗している、アクセスが拒否されている(403 Forbidden)、あるいはリソースが見つからない(404 Not Found)などのHTTPエラーが発生しているかもしれません。これらのエラーが発生した場合でも、
wget
は0バイトのファイルを作成することがあります。 - 一時的なネットワークの問題やサーバーの不調により、データを受信する前に接続が切断された可能性もあります。
-c
オプションでの再開や、--tries
オプションでのリトライを試みてください。
- ダウンロード自体がエラーで完了しているか、実際の内容が0バイトのファイルである可能性があります。詳細な出力を確認するため、
- wget がメモリを大量に消費します。
- 非常に巨大なファイルをダウンロードしている場合や、再帰的ダウンロードで大量のURLをキューに保持している場合などに発生することがあります。特に、リンクを変換 (
-k
) するためには、ダウンロードしたHTMLファイルの情報をメモリに保持する必要があります。 - 再帰の深さや範囲を制限する (
-l
,-np
,-D
,-A
,-R
) ことで、ダウンロード対象を減らし、メモリ消費を抑えることができます。 - それでも問題が発生する場合は、よりメモリ効率の良い別のツールを検討するか、ダウンロードを分割して実行するなどの対策が必要になることがあります。
- 非常に巨大なファイルをダウンロードしている場合や、再帰的ダウンロードで大量のURLをキューに保持している場合などに発生することがあります。特に、リンクを変換 (
これらのトラブルシューティングのヒントを参考に、問題の原因を特定し、適切なオプションを組み合わせて対処してください。多くの場合、エラーメッセージが重要な情報を含んでいますので、それを注意深く読むことが解決の第一歩となります。