【Linux】wgetでファイルをダウンロードする方法|curlとの違い・-cで再開・-rで再帰取得

【Linux】wgetでファイルをダウンロードする方法|curlとの違い・-cで再開・-rで再帰取得 Linux

wgetは、URLを指定してファイルをダウンロードするコマンドです。curlと似ていますが、wgetは「ファイルとして保存する」ことに特化しており、ソフトウェアの取得、バックアップの復元、Webページの一括ダウンロードなどで活躍します。コマンド1つでファイルが手元に保存される手軽さが魅力です。

curlwgetはよく比較されますが、役割が少し違います。ざっくり言えばwgetは「ファイルをダウンロードして保存」、curlは「データを取得して表示・送信」が得意です。この記事では、実際のサーバー(当サイトを含む)からファイルをダウンロードしながら、wgetの使い方と、curlとの使い分けを整理します。wgetは初期状態では入っていないこともありますが、apt install wgetなどで簡単に導入できます。

先に結論

  • wget URLで、URL上のファイル名のまま保存します(curlと違い既定で保存)。
  • -O 名前で保存名を指定、-O -で標準出力へ出せます。
  • 同名ファイルがあると上書きせず.1を付けて別名保存します。
  • スクリプトでは-q(静音)で進捗表示を消します。
  • 中断したダウンロードの再開は-c(continue)です。
  • 使い分け: ファイル保存はwget、表示・API送信はcurl

データの取得・送信はcurl、圧縮ファイルの展開はtar、疎通確認はpingもあわせて参考になります。

スポンサーリンク

wgetの基本:URLのファイル名で保存

wget URLを実行すると、URLの末尾のファイル名で、そのまま現在のディレクトリに保存されます。curlが既定で画面に表示するのと違い、wgetは何も指定しなくてもファイルとして保存してくれます。

wget の基本
# URL上のファイル名でそのまま保存
wget https://example.com/robots.txt
# → robots.txt というファイルが保存される

# 進捗バーが表示される(ダウンロード状況が分かる)
wget https://example.com/large-file.zip

# スクリプトでは -q で静かに(進捗を消す)
wget -q https://example.com/data.csv

実際に当サイトからwget https://codingls.com/robots.txtを実行したところ、robots.txtというファイル名のまま153バイトが保存されました。wgetURLの最後の部分を自動的にファイル名として使うため、保存先を指定しなくても手元にファイルが残ります。ダウンロード中は進捗バーが表示され、大きなファイルでも状況が分かります。スクリプトやログに混ぜたくない場合は-q(quiet)で進捗表示を抑制します。

-Oで保存名を指定する

保存するファイル名を自分で決めたいときは-O 名前(大文字のO)を使います。また、-O -(ハイフン)とすると、ファイルに保存せず標準出力へ出せます(パイプで他コマンドに渡せます)。

-O で保存名指定
# 保存名を指定する
wget -O myname.txt https://example.com/robots.txt
# → myname.txt という名前で保存される

# -O - で標準出力へ(画面表示・パイプ)
wget -q -O - https://example.com/data.txt | grep "error"
#   ↑ ファイルに保存せず、grep に直接渡す

# curl の -o は小文字、wget は大文字の -O(紛らわしい)

実機でも、-O myname.txt指定した名前で保存でき、-O -標準出力に内容を出せるUser-agent: *が表示)ことを確認しました。注意点として、保存名指定のオプションはcurlが小文字の-owgetが大文字の-Oで、紛らわしいので混同しないようにしてください。-O -を使えば、wgetでもcurlのように「取得したデータをパイプで処理する」使い方ができます。

【罠】同名ファイルは上書きされず.1が付く

wgetの意外な挙動として、同じ名前のファイルが既にあると、上書きせずに.1.2…と番号を付けて別名保存します。「上書きされない」のは安全ですが、知らないと同じファイルが増殖して戸惑います。

同名ファイルの挙動(実証)
# 1回目
wget https://example.com/robots.txt
# → robots.txt

# 2回目(同じURL)
wget https://example.com/robots.txt
# → robots.txt.1   ← 上書きせず別名で保存される!

# 3回目
# → robots.txt.2

# 常に同じ名前で上書きしたいなら -O を使う
wget -O robots.txt https://example.com/robots.txt
同名DLは上書きされず番号が増えていく(実証)

実機で、同じrobots.txtwgetで2回ダウンロードしたところ、2回目はrobots.txt.1という別名で保存されました(robots.txtrobots.txt.1の2つが並ぶ)。wget既存ファイルを勝手に上書きしない安全設計のため、繰り返しダウンロードすると.1.2…と番号が増えていきます。「あれ、ファイルが増えている」と戸惑うのはこれが原因です。常に同じ名前で最新版に上書きしたい場合(cronでの定期ダウンロードなど)は、-O ファイル名で明示的に保存名を指定してください。-Oを使うと、既存ファイルがあっても上書きされます。逆に「上書きしたくない、履歴を残したい」なら、この既定の番号付け挙動がそのまま役立ちます。用途に応じて-Oの有無を使い分けましょう。

【重要】curlとwgetの使い分け

curlwgetは似ていますが、得意分野が異なります。最大の違いは、wgetは既定でファイルに保存、curlは既定で画面に表示することです。この性格の違いから、向いている用途が分かれます。

curl と wget の違い
# 既定の動作が逆
wget https://example.com/file.zip     # → ファイルに保存
curl https://example.com/file.zip     # → 画面にダーッと表示(バイナリだと文字化け)

# wget が得意: ファイルのダウンロード・保存
wget https://example.com/software.tar.gz
wget -r https://example.com/docs/       # 再帰的にサイトを取得

# curl が得意: API・データの送受信、細かい制御
curl -X POST -d '{"key":"val"}' https://api.example.com/
curl -I https://example.com/            # ヘッダーだけ確認

使い分けの目安はこうです。ファイルをダウンロードして保存したい・サイトを丸ごと取得したいならwgetAPIを叩く・データを送信する・レスポンスを細かく調べたいならcurlです。wgetダウンロードに特化した便利機能(再帰取得、中断再開、リトライなど)が充実しており、curlHTTPメソッドやヘッダーの細かい制御POST送信やヘッダー付与)が得意です。どちらか一方だけでなく、用途に応じて両方使えるようにしておくのが実務では便利です。

便利なオプション(-c / -r / リトライ)

wgetには、ダウンロードを支える便利なオプションが揃っています。特に中断したダウンロードを再開する-cは、大きなファイルで役立ちます。

-c / -r / リトライ
# -c: 中断したダウンロードを途中から再開(レジューム)
wget -c https://example.com/huge-file.iso
#   ↑ 回線が切れても、もう一度実行すれば続きから

# -r: 再帰的にダウンロード(サイトのミラーリング)
wget -r -np -l 2 https://example.com/docs/
#   -np = 親ディレクトリをたどらない, -l 2 = 深さ2まで

# -t: リトライ回数, -T: タイムアウト秒
wget -t 5 -T 30 https://example.com/file.zip

# 証明書エラーを無視(自己署名証明書など。多用は非推奨)
wget --no-check-certificate https://self-signed.example.com/

実機でも、-c(continue)・-r(recursive)・-t(tries)・--no-check-certificateといったオプションが利用可能なことを確認しました。-cは、大きなファイルのダウンロードが途中で切れたとき、最初からやり直さず「続きから」再開できる非常に便利なオプションです(サーバー側が対応している場合)。-rリンクをたどって再帰的にダウンロードし、Webサイトをまるごと保存(ミラーリング)できます(-npで親をたどらない、-lで深さ制限を付けるのが安全)。--no-check-certificateSSL証明書のエラーを無視しますが、セキュリティを下げるため多用は避けてください。

ダウンロードの失敗(404など)

wgetは、ファイルが見つからない(404)などのHTTPエラーを失敗として扱い、終了コードを返します。スクリプトでダウンロードの成否を判定するのに使えます。

失敗時の終了コード
# 存在しないURL(404)
wget -q https://example.com/notfound/
echo $?
# 8    ← サーバーがエラー応答を返した(0以外=失敗)

# 終了コードの主な意味:
#   0 = 成功
#   4 = ネットワーク障害
#   8 = サーバーがエラー応答(404 など)

# スクリプトでの判定
if wget -q -O data.json https://api.example.com/data; then
  echo "取得成功"
else
  echo "取得失敗(終了コード $?)"
fi

実機でも、存在しないURLへのwget終了コード8(サーバーのエラー応答)を返すことを確認しました。wgetの終了コードは、0が成功、4がネットワーク障害、8がサーバーのエラー応答(404など)と種類が分かれており、ifで成否を判定してスクリプトの処理を分けられます。curl-fと同様、ダウンロードの成否を確実に検知したいスクリプトで役立ちます。

主なオプション一覧

wgetでよく使うオプションをまとめます。

オプション 働き
wget URL URL上の名前で保存
-O 名前 保存名を指定(-O -で標準出力)
-q 静音(進捗を消す)
-c 中断ダウンロードの再開
-r / -np / -l 再帰取得 / 親を辿らない / 深さ制限
-t / -T リトライ回数 / タイムアウト

よくある失敗

同じファイルが.1、.2と増えていく

wgetは上書きしません。上書きしたいなら-O ファイル名で保存名を指定します。

curlの-oのつもりで小文字を使う

wgetの保存名指定は大文字-Oです。小文字-oはログ出力先の指定になります。

大きなファイルの途中で切れて最初からやり直す

-cを付ければ続きから再開できます。

-rで意図せず大量のファイルを取得する

-np-l 深さで範囲を制限します。

ダウンロード失敗に気づかない

終了コード(0=成功)で判定します。スクリプトではif wget ...で分岐します。

よくある質問

Qwgetでファイルをダウンロードするには?
Awget URLと実行するだけで、URL上のファイル名のまま現在のディレクトリに保存されます。curlと違い、何も指定しなくてもファイルとして保存されるのが特徴です。実機でも、当サイトのrobots.txtがそのままの名前で保存されることを確認しています。保存名を変えたいときは-O 名前を使います。
Qcurlとwgetはどう使い分けますか?
Aファイルをダウンロードして保存したい、サイトを丸ごと取得したいならwget、APIを叩く・データを送信する・レスポンスを細かく調べたいならcurlが向いています。最大の違いは、wgetが既定でファイルに保存するのに対し、curlは既定で画面に表示することです。用途に応じて両方使えるようにしておくと便利です。
Q同じファイルをwgetすると.1が付くのはなぜですか?
Awgetは既存のファイルを上書きしない安全設計だからです。同名のファイルがあると.1.2と番号を付けて別名で保存します。実機でも、同じrobots.txtを2回ダウンロードするとrobots.txt.1ができることを確認しています。常に同じ名前で上書きしたい場合は-O ファイル名で保存名を指定してください。
Q途中で切れたダウンロードを再開できますか?
Awget -c URLで、中断したダウンロードを途中から再開できます(サーバーが対応している場合)。大きなファイルで回線が切れたときに、最初からやり直さずに済むため便利です。-cはcontinueの略です。
Qwgetでダウンロードの成否を判定するには?
A終了コードを使います。wgetは成功で0、ネットワーク障害で4、サーバーのエラー応答(404など)で8を返します。実機でも、存在しないURLでは終了コード8になることを確認しています。if wget -q -O ファイル URL; then ...のように書けば、成否で処理を分岐できます。

まとめ

  • wget URLURL上の名前のまま保存(curlと違い既定で保存)。
  • -O 名前で保存名指定、同名は上書きせず.1が付きます。
  • 使い分け: 保存はwget、表示・送信はcurl
  • 中断再開は-c、再帰取得は-r-np/-lで制限)。
  • 失敗は終了コード(0=成功・8=サーバーエラー)で判定できます。

wgetは、ファイルのダウンロードを最も手軽に行えるコマンドです。「保存ならwget、送受信ならcurl」という使い分けさえ押さえれば、ソフトウェアの取得からサイトのミラーリングまで幅広くこなせます。curlとあわせて使いこなし、コマンドラインでのWeb操作を自在にしましょう。