2009年5月8日金曜日

多数のファイルを圧縮するときはzipじゃなくてtar+gzipを使う

1. データ圧縮技術とファイルアーカイブ技術は違う。
2. データ圧縮とは、(ここではファイルの)サイズを文字通り圧縮=小さく=すること。ものすごく簡単に言うと、「aaaaa」と書いてあったら「a5」とすれば5バイトが2バイトに圧縮される、的な理論。
3. ファイルアーカイブとは、複数のファイルをつなぎあわせて一つのファイルにまとめることを言う。圧縮は関係ない。
4. とは言っても近年はファイルをアーカイブするなら圧縮もついでにやるケースがほとんどなので、「本来はアーカイブと圧縮は別物」ということに気づかない人は意外にいる。
5. gzipは圧縮のみでアーカイブ機能はない。 zipとtar(GNU tar)はアーカイブと圧縮の両方の機能を持つ。
6. tarについて正確に言うと、tar(GNU tar)は圧縮オプションをコマンドに与えると内部で勝手にgzipやらbzip2やらを呼びだして圧縮処理してくれるという仕組み。
7. zipとtarの大きな違いは、圧縮対象をディレクトリ(とその配下の複数のファイル)にしたとき、 zipはファイルをひとつずつ圧縮しながらアーカイブに加えてゆくのに対し、tarはアーカイブしてから最後にまとめて圧縮する。
8. なお、gzip形式とzip(PKZIP)形式との間に、圧縮率の差はそれほどは無い。
9. 沢山の単純なファイル=特に、何かの動作ログとか定型文とかそういうテキスト=を対象とする場合、小さいファイルをちょこまか圧縮してからアーカイブするよりも、小さいファイルをまとめて一つの大きなファイルにアーカイブしてから圧縮をかけるほうが圧縮アルゴリズム的には有利なので、上のような結果になることがある。