ワードプレスサイトを運営していると、投稿記事が増えると共にアップロードした画像のファイルもだんだん増えてきます。中には、FTPソフトを使ってダウンロードしようとすると、それだけで何時間もかかってしまうことも・・・。
先日、あるサイトのローカル環境を構築するためにuploadsフォルダを丸ごとローカルに落とそうとした時は、uploadフォルダの中身をFTPソフトで表示しようとしただけで、カーソルが回転したままずっと動かなくなってしまったことがありました。このような数千枚の画像ファイルが蓄積されたuploadフォルダをダウンロードするには、何時間もかかってしまいます。
そこでFTPを通すよりも、速く処理する方法を教えてもらったので、忘れないようにまとめておきます。
作業の手順
- リモートサーバに接続してuploadフォルダをまるごとgzファイルに圧縮しておく
- 圧縮したgzファイルをFTP経由でダウンロード
- ローカルサーバにgzファイルを入れて、そこで解凍する
FTPソフトでは、画像を1枚1枚落としてくるので、何千枚・何万枚も画像がある場合には、ファイル名をいちいち取得するためにダウンロードに時間がかかってしまうらしいです。
でもリモートサーバでgzファイルに圧縮しておいて、それをダウンロードすれば、ファイルは1つだけなので、遥かに高速でローカルに持ってくることができるのです。
STEP1:リモートサーバに接続してuploadフォルダをまるごとgzファイルに圧縮しておく
「Aというフォルダ」を「Bというファイル名」で圧縮して、gz形式にする場合
Aフォルダは、今リモートサーバ上にあるフォルダ名にしてください。
Bファイルの名前は、自由に好きな名前をつけることができます。
拡張子「.gz」をつけるのを忘れずに。
$ tar cvzf uploads.tar.gz uploads
実際には上記のようにして使いました。
STEP2:圧縮したgzファイルをFTP経由でダウンロード
ここは、普通にFTPでダウンロードします。
圧縮してあるので、10分間ほどでgzファイルをローカルに持ってくる事ができました。
FTPソフトを使わずに、コマンドでダウンロードする方法も教えてもらったんだけど、忘れちゃった・・・また今度、調べておきます(^^);
STEP3:ローカルサーバにgzファイルを入れて、そこで解凍する
ダウンロードしてきたgzファイルをローカルに置いて、次のコマンドで解凍できます。
圧縮ファイルのB.gzをCという名前のフォルダにして解凍する、という命令です。
$ tar xvzf uploads.tar.gz uploads
解凍するときはあっという間ですね。
このときは10分かけて圧縮した数千枚のファイル。解凍するときは10数秒でした。
ちなみに・・・cvzfって何?xvzfって何?
tarコマンドとは
複数のファイルを1つのアーカイブファイルにまとめたり、逆に展開したりするコマンド。オプション -z を使えば、gzip での圧縮または展開も同時に行う。
tarコマンドのオプション
-c 新しくアーカイブファイルを作成する
-v 処理の進行しているファイル名を表示する
-z gzipで圧縮または展開を同時に行う
-f アーカイブファイル名をパラメータで指定する。これを指定しないと標準入力 または標準出力が使われる
-z を使う場合は、アーカイブファイルの拡張子として .tar.gz または .tgz がよく使われる。-z を使わない場合は、.tar がよく使われる。
◆ アーカイブ
$ tar cvf tarファイル名 アーカイブ対象ディレクトリ
◆ 圧縮してアーカイブ
$ tar cvzf tgzファイル名 圧縮対象ディレクトリ
◆ 展開
$ tar xvf tarファイル名
◆ 解凍して展開
$ tar xvzf tgzファイル名
◆ アーカイブされているファイルの一覧
$ tar tf tarファイル名
◆ 圧縮してアーカイブされているファイルの一覧
$ tar tzf tgzファイル名
tarコマンドでわからない事があった場合
でヘルプが参照できます。