Linux便利コマンド : wget

KK
2024-01-10
2024-01-10
目次

年三日坊主のKKです。

明けましておめでとうございます。
この記事執筆時点でも能登半島地震の被害全容が見えておらず心配ですが、
こういった大規模災害時に開放されるFree Wi-Fi(00000JAPAN)の安全性が話題になっていたので、このネタでブログ書こうと思っていたら既に立派な記事が上がっていたので止めました。
(フリーレンネタまで被ってた……みんな考えることは同じですね)


数年前まで利用されていた社内ポータルサーバが老朽化したため、サーバ廃止前にコンテンツのバックアップを取ろうと思ったのですが、CMSからのバックアップではコンテンツの再現性に難があったため、Webアクセスしてサイトコンテンツをダウンロードすることにしました。

当初は手抜き楽をしようとWindows用のダウンロードツール「Cyotek WebCopy」を試したのですが、長らく放置されていたためか動的ページの応答が遅くタイムアウトしてしまいます。
(なんと応答に3分以上かかるページまである。。。)

結局、急がば回れということで別の社内サーバ(社員が自由に使える検証機)からwgetコマンドを使用してダウンロードすることにしました。

wgetコマンドにはたくさんのオプションがありますが今回使用したのは以下のオプションです。

-b バックグラウンドで実行

-r 再帰的検索を有効にする

--waitretry=200 最大リトライ待ち時間
(1回目1秒、2回目2秒…とリトライごとにタイムアウト待ち時間を伸ばしていき、最大この秒数までタイムアウト待ち時間を伸ばします)

--retry-connrefused "connection refused"エラーが発生しても再接続します。

-t0 リトライ回数を設定。0はリトライ回数無限

-p あるHTMLページを適切に表示するために必要なすべてのファイルをダウンロードします。
これには、インライン化された画像、サウンド、参照されたスタイルシートなどが含まれます。

-E 動的ページなど末尾に.htmlの付与されていないページコンテンツをダウンロードした際、ファイル名に.htmlを付与します。

-k ダウンロードが完了したら、ドキュメント内のリンクをローカルでの表示に適したものに変換します。

特筆すべきは「--waitretry=200」です。
前述の通り、応答に3分(180秒)以上要するページもあることがわかっていましたので、最大リトライ待ち時間は200秒としました。
また、今回はすべてのページを静的なページとして保存したかったので「-p」や「-E」「-k」も必要でした。

以上を踏まえて以下のようなコマンドでダウンロードを実施しました。

$ wget -b -r --waitretry=200 --retry-connrefused -t0 -p -E -k http://portal.example.com/

1ページで応答に最長3分かかると考えると何日かかるだろうかと心配していましたが、実際には一晩で無事ダウンロード完了していました。

というわけで下手にフリーソフトを使うより古典的なコマンドを使った方が簡単だったという話でした。

なお、上記はCentoOS7.9のGNU Wget 1.14を元に記載しています。
wgetのバージョンによっては挙動が異なる場合もありますのでご注意ください。

◆参考

Free Wi-Fi(00000JAPAN)は安全なのか?

Cyotek WebCopy