zipとgzip
ファイルを圧縮する際に毎度どの形式で圧縮するか若干悩んだりはしないでしょうか。
この記事ではzipとgzipの違いを明確にし、根拠をもって使い分けできるようしたいと思います。
zipとgzipは全くの別物
いきなりタイトルを覆すことになるのですが、zipとgzipを単純に比較することはできません。
- zip: アーカイバ
- gzip: 圧縮コマンド
という違いがあります。
アーカイバとは複数のファイルをまとめる機能(アーカイブ)を持っています。
つまり、ディレクトリを対象にできます
一方gzipはアーカイブ機能を有していないため、ディレクトリを対象にすることはできません。
実際にディレクトリに対してgzipコマンドの実行を試みますが受け付けてくれません。
$ mkdir sample/
$ gzip sample/
gzip: sample/ is a directory -- ignored
zipコマンドはディレクトリに対して使うことができます。
zip -r sample.zip sample/
adding: sample/ (stored 0%)
tarを使う
よってUnix系のOSではディレクトリを圧縮する場合、gzipではなくtarを使います。
$ tar zcf sample.tar.gz sample
a sample
オプションの解説
- -z: gzip圧縮をする
- -c: 新規アーカイブを作成
- -f: ファイル名作成
zipとtar
よって、比較すべきはzip
とtar
ということになりました。
1GBのファイルを圧縮してzipとtarコマンドを比較します。
$ mkfile 1g sample/sample.txt
zip
$ zip -r zip_commpression.zip sample
adding: sample/ (stored 0%)
adding: sample/test.txt (deflated 100%)
$ du -h zip_commpression.zip # 容量確認
1.0M zip_commpression.zip
tar
$ tar zcvf tar_compression.tar.gz sample/
a sample
a sample/test.txt
$ du -h tar_compression.tar.gz # 容量確認
1.0M tar_compression.tar.gz
圧縮後のファイルはどちらも1.0Mで、元ファイルの0.1%になりました。
圧縮率においての差は無いようです。
まとめ
特徴をまとめました。
分類 | 圧縮率 | 解凍機能 | |
---|---|---|---|
zip | アーカイバ | 0.1% | なし |
gzip | コンプレッサ | 0.1% | あり |
tar | アーカイバ | 0.1% | あり |
単純なテキストファイルを圧縮した場合の圧縮率はどれも0.1%と等しくなりました。
また、gzip,tarコマンドはオプションで解凍をすることができますが、zipの場合、別途unzipコマンドを用いる必要があります。
あなたがwindowsユーザーの場合
迷わずzip
コマンドを使いましょう。
あなたがUnix派生のOSユーザーの場合
どちらを使っても良いのかと思います。ディレクトリとファイルを対象とした圧縮・解凍のことを考えると、どちらを選択したとしても2つのコマンドを扱えるようにしておく必要があり、圧縮率も変わりません。
しかし、標準ではzip
がインストールされていなかったりするので、せっかくならgzip
とtar
を使ったほうが良いのかなと個人的には思います。windowsでも解凍することはできるので、他人のOSを気にする必要も無いと思います。