レンタルサーバーのファイル一式を別のサーバーに移転するときの話です。
FTPでちまちまローカルPCにダウンロードしてから別サーバーにアップロードするのが一番ポピュラーな方法です。
数百のファイルならいいのですが、ファイル数が多いと何日かかるかわかりません。
FTPでダウンロードするファイル数を減らすために、サーバー側でファイル一式をzipやtarで固めて1つのファイルにすればダウンロード・アップロードが一回で終わります。
しかし、一部のディレクトリやファイルを除外してファイルをまとめたい時にどうしたらよいでしょうか?
tarコマンドでファイルやディレクトリを除外して固める
tarコマンドのオプション指定
tarコマンドのオプション指定はこちらが詳しい。
tarでファイルやディレクトリを除外する場合、
–excludeオプションを使う。
ディレクトリ名を指定した場合、パス付のファイルに含まれる文字列にマッチして除外されるので、意図しない部分でマッチしてしまうこともある。
パス付でディレクトリ名を指定する方が安全。
zipコマンドでファイルやディレクトリを除外して固める
zipコマンドのオプション指定
zipコマンドのオプション指定はこちらが詳しい。

–exclude=ファイルで、ファイルやディレクトリを指定して除外
–include=ファイルで、ファイルやディレクトリを指定して限定
短いオプション | 長いオプション | 意味 |
---|---|---|
-t 日付 | –from-date=日付 | ファイルの更新日が指定した日付以降のものを対象とする(日付は「mmddyyyy」で指定) |
-tt 日付 | –before-date=日付 | ファイルの更新日が指定した日付以前のものを対象とする(日付は「mmddyyyy」で指定) |
-@ | 処理対象のファイル名を標準入力から読み込む | |
-x ファイル | –exclude=ファイル | 対象から外すファイル名を指定する(対象ファイルの後で指定) |
-i ファイル | –include=ファイル | 対象とするファイル名を限定する(対象ファイルの後で指定) |
-n 拡張子 | –suffixes=拡張子 | 指定した拡張子は圧縮しない |
-R | –recurse-patterns | 指定パターンを再帰的に探して対象にする(例えば、「-R ZIPファイル “*.txt”」でカレントディレクトリ下の「*.txt」を圧縮対象にする) |
zip –exclude の使い方
–excludeオプションは使い方がややこしい。
指定できるのはファイルなので、ディレクトリは指定できません。
ディレクトリを指定する場合は、ディレクトリパス付で正規表現で指定すれば一括で指定できます。
例
zip -r tmp/design.zip design -x \*/.git/\* design/img/\* design/css/\*
除外の指定は、パス付のファイル名を指定していると考えると間違いません。
上記はdesignディレクトリを圧縮したときに、圧縮されるファイルのパスはdesign/xxx/yyy/zzzという感じでパスが保存されます。
除外したいファイルを正規表現で指定すればいいわけです。
ちなみに、*はバックスラッシュでエスケープしないとコマンドラインで展開されてしまいますので注意。
zipコマンドは大量のファイルの圧縮で異常終了する
zipコマンドは圧縮して固めてくれる優れものですが、その分処理が重く、ファイルが大量になってくると異常終了して終わってしまうことがあります。
tarと同じく無圧縮にすれば多くの場合、正常終了するはずですので、圧縮レベルをオプションで指定します。
短いオプション | 長いオプション | 意味 |
---|---|---|
-0~9 | 圧縮率の調整。「-0」は圧縮せずZIPファイルに格納するのみ~「-9」で圧縮率を最高にする。圧縮率を上げると処理スピードが落ちる(デフォルトは「-6」) | |
-s 分割サイズ | –split-size=分割サイズ | 分割ZIPファイルを作成するときのサイズ |
-O ファイル名 | –output-file=ファイル名,–out=ファイル名 | 出力するZIPファイル名(ZIPファイルを元に、別のZIPファイルを作成するような場合に使用) |
-e | –encrypt | 暗号化する |
-o | –latest-time | ZIPファイルのタイムスタンプを、対象ファイルの最新ファイルと同じにする |
-F | –fix | ZIPファイルを修復する(「-FF」でさらに細かく修復を試みる) |
-FF | –fixfix | ZIPファイルを修復する(「-F」では修復できなかったファイルも修復できる可能性がある) |
-J | –junk-sfx | 圧縮ファイルの拡張子(.zip)を付けない |
-z | –archive-comment | ZIPファイルにコメントを追加する(コメントは圧縮後に入力) |
まとめ
ファイル一式を固めて、転送、ダウンロードする場合、tarで固めるのが一番確実。
もちろんアーカイブファイルのサイズは大きくなる。
今の時代、ファイルサイズの制限は無いに等しいので、zipで無理やり圧縮するよりも、無圧縮のtarを使う方が早い。
アーカイブが大きくなりすぎるということであれば、ディレクトリやファイルを除外して固めるオプションがあるので、そちらを組み合わせると上手くいく。