wgetとは
GNU Wget(グヌー・ダブリューゲット/一般にウィジェットとも読まれます)は、HTTPやFTPなどからファイルを非対話的に取得するコマンドラインツールです。端末を操作し続けなくても動き、スクリプト、予定済みジョブ、低速・不安定な回線での取得へ向きます。
一個のURLだけでなく、ファイルに並べたURL、ページ内のリンクを辿る再帰retrieval、途中ファイルの再開、リモート更新時だけの取得等を扱えます。GNU WgetのバージョンによってHTTPSライブラリーや選択肢が異なるため、実行環境の手動を基準にします。
wgetは「サイトを丸ごと保存する魔法」ではありません。開始URLから許可されたリンクだけを辿り、HTTP応答として取得できたリソースをローカルファイルへ保存するクローラー型ダウンロードです。

取得作業を構成する要素
コマンド行、入力ファイル、ページ内リンクから取得候補を作ります。
応答、リダイレクト、再試行条件を読み、データをストリームとして受け取ります。
リモートパス、コンテンツdisposition、指定名、ディレクトリー構造の規則を選びます。
サーバーの範囲対応とローカル大きさを確認し、途中から続けます。
タイムスタンプやローカルファイルの有無を使いますが、内容同一を保証する比較ではありません。
深さ、ホスト、パス、ファイル種類、親範囲等の検査点で探索を止めます。
非対話的とは「質問せず進む」こと
Wgetは背景や端末切断後も使いやすく、進捗とエラーをログへ書けます。途中で入力を求めないため、認証失敗、ディスク不足、リダイレクトループなどの停止条件を事前に設計します。
予定済みジョブでは実行ディレクトリー、環境変数、プロキシ、証明書保存、保存権限が手動時と異なることがあります。終了状態、ログ、取得件数、空ファイル・partialファイルを監視します。
保存名はURL末尾だけで決まらない
同じ末尾名を持つ別URL、問い合わせ付きURL、リダイレクト後URL、Content-Dispositionヘッダーで提案された名前が重なることがあります。既存ファイルを上書き・番号付け・skipする規則は選択肢とモードで変わります。
公開ディレクトリーへ直接保存すると、取得途中のファイルをWebサーバーが配信する危険があります。一時ディレクトリーへ取得し、大きさ・ハッシュ・コンテンツタイプ・マルウェア検査後に配置します。
再開は同じ内容の続きかを確認する
continue選択肢はローカルpartialファイルの長さから取得を再開します。リモートファイルが差し替わっていたのに同じ名前なら、古い前半と新しい後半が結合される危険があります。
ETag、Last-Modified、ファイル大きさ、ハッシュ、配布元の署名を使える範囲で照合します。サーバーが範囲要求へ対応しない場合は最初から受け直すことがあります。
timestampingは内容ハッシュ比較ではない
リモートのLast-Modifiedと大きさ等をローカルファイルと比べ、更新が必要と判断したものだけ取得できます。ただしサーバーが時刻を返さない、時刻が不正確、コンテンツは変わったのに時刻が同じという場合があります。
配布物の正しさが重要なら、timestampingは転送量を減らす仕組みと考え、チェックサムやデジタル署名による完全性確認を別に行います。
再試行は失敗を無限に隠さない
タイムアウト、接続拒否、サーバーエラー等で再試行できますが、エラー種別によって再試行の意味が違います。認証失敗や存在しないリソースを短間隔で繰り返しても直りません。
回数、待ち時間、全体deadlineを設定し、レート制限を尊重します。複数処理が同じURLを再試行すると相手と自分の回線へ負荷を集中させます。
再帰retrievalは境界を先に決める
ページ内リンクを辿ると、ナビゲーション、カレンダー、検索結果、異なるホスト、巨大ファイルへ際限なく広がる場合があります。深さ、ドメイン・ホスト、親ディレクトリー、受け入れ・拒否パターン、ファイル種類を指定します。
リンクをローカル閲覧向けに変換する機能もありますが、JavaScript実行後に生成されるリソース、ログイン後データ、API、動画ストリーム、same-origin方針までブラウザーのように再現するわけではありません。
利用条件と負荷を尊重する
robots指示、利用規約、著作権、認証範囲、個人情報を確認し、要求間隔と帯域幅を抑えます。取得できることと、複製・再公開してよいことは別です。
パスワードをコマンド行やURLへ直接書くと、シェル履歴、処理一覧、ログへ残る場合があります。認証情報ファイルの権限、秘密管理機能、短期トークン等を使います。
wgetはURL列を無人でファイルへ保存する取得ツールです。再開・更新・再試行・再帰は便利ですが、同一性、探索境界、容量、負荷、利用権限を別々に管理して初めて安全な自動取得になります。
GNU Wgetの非対話取得、input file、continue、timestamping、recursive retrieval、directory・accept・reject・retry等:GNU Wget manual