gzip

gzipとは、ファイルをGZIP形式で圧縮するUnix/Linuxコマンドであり、GNUプロジェクトによって開発されている。

gzipとzipの違い

gzipzipはどちらも圧縮形式であるが、用途や特徴が異なり、互換性がない。

gzipとzipの違い
gzip zip
拡張子 .gz .zip
複数ファイル格納 不可(基本的に1ファイルのみ) 可能
ディレクトリ圧縮 単独では不可 可能
圧縮方式 DEFLATE 主にDEFLATE
Linux/Unixでの利用 非常に一般的 一般的
Windows標準対応 近年は対応あり 標準対応
圧縮率 高い(一般的にzipより小さくなる) 普通

gzipは「1つのファイルを小さくする」ことしかできない。そのため、複数のファイルやフォルダを圧縮したいときは、まずtarというツールで1つのファイルにまとめてから、gzipで圧縮する。これがよく見かける .tar.gz というファイルである。

zipは複数のファイルやフォルダを、その階層構造(フォルダのなかのフォルダなど)を保ったまま1つの.zipファイルにまとめることができる。

概要

gzip [-acdfhklLnNrtvV19] [-S suffix] [name]...

引数

以下に示す引数を gzip コマンドに指定できる。

name
圧縮するファイルの名前を指定する。
$ gzip file1

file1 というファイルを圧縮して、 file1.gz というファイルを作成する。元の file1 というファイルは削除される。

オプション

以下に示すオプションを gzip コマンドに指定できる。

-a
ASCIIテキストモードで圧縮する。行末の変換はローカルの慣例に従って行う。非Unixシステムでのみサポートされる。 (POSIX)
改行コードの違い
OS 改行コード 表記
Linux / Unix LF \n
macOS LF \n
Microsoft Windows CR + LF \r\n
--ascii
ASCIIテキストモードで圧縮する。行末の変換はローカルの慣例に従って行う。非Unixシステムでのみサポートされる。 (GNU)
-c
圧縮した結果をファイルではなく、標準出力へ出力する。この場合、元のファイルは削除されない。出力結果を他のコマンドへパイプで渡すときに使う。 (POSIX)
$ gzip -c file1 > foo.gz
--stdout
圧縮した結果をファイルではなく、標準出力へ出力する。この場合、元のファイルは削除されない。出力結果を他のコマンドへパイプで渡すときに使う。 (GNU)
$ gzip --stdout file1 > foo.gz
-d
圧縮されたファイルを展開(解凍)する。 (POSIX)
$ gzip -d example.tar.gz
--decompress
圧縮されたファイルを展開(解凍)する。 (GNU)
$ gzip --decompress example.tar.gz
-f
ファイルに複数のシンボリックリンクがある場合や、対応するファイルがすでに存在する場合、あるいは圧縮データが端末から読み込まれるか端末へ書き込まれる場合でも、強制的に圧縮または解凍を行う。 (POSIX)
$ gzip -f example.tar.gz
--force
ファイルに複数のシンボリックリンクがある場合や、対応するファイルがすでに存在する場合、あるいは圧縮データが端末から読み込まれるか端末へ書き込まれる場合でも、強制的に圧縮または解凍を行う。 (GNU)
$ gzip --force example.tar.gz
-k
圧縮または解凍の際、入力ファイルを削除せず、そのまま残す。 (POSIX)
$ gzip -k example.tar.gz
--keep
圧縮または解凍の際、入力ファイルを削除せず、そのまま残す。 (GNU)
$ gzip --keep example.tar.gz
-q
すべての警告を抑制する。 (POSIX)
$ gzip -q example.tar.gz
--quiet
すべての警告を抑制する。 (GNU)
$ gzip --quiet example.tar.gz
-r
ディレクトリの中にあるファイルを再帰的にすべて圧縮する。ディレクトリの構造はそのままで、中にあるファイルがすべて個別に .gz ファイルに変換される。 (POSIX)
$ gzip -r /home/tsuka/example

ディレクトリの中にある .gz ファイルを再帰的にすべて展開(解凍)する。

$ gzip -d -r /home/tsuka/example
--recursive
ディレクトリの中にあるファイルを再帰的にすべて圧縮する。ディレクトリの構造はそのままで、中にあるファイルがすべて個別に .gz ファイルに変換される。 (GNU)
$ gzip --recursive /home/tsuka/example

ディレクトリの中にある .gz ファイルを再帰的にすべて展開(解凍)する。

$ gzip --decompress --recursive /home/tsuka/example
-S suffix
圧縮ファイルの拡張子を指定する。圧縮ファイルの拡張子を指定しない場合は、 .gz の拡張子が付けられる。 (POSIX)
$ gzip -S .gzip file1
--suffix suffix
圧縮ファイルの拡張子を指定する。圧縮ファイルの拡張子を指定しない場合は、 .gz の拡張子が付けられる。 (GNU)
$ gzip --suffix .gzip file1
-1
最も速い方法で圧縮する。ただし、圧縮率は低くなる。 (POSIX)
$ gzip -1 example.tar.gz
--fast
最も速い方法で圧縮する。ただし、圧縮率は低くなる。 (GNU)
$ gzip --fast example.tar.gz
-6
普通の方法で圧縮する(デフォルト)。(POSIX)
$ gzip -6 example.tar.gz

本サイトのすべてを tar コマンドでまとめたファイルを例に、圧縮率の違いを以下に示す。

圧縮率の違いの例
圧縮方法 ファイルサイズ
segakuin.com.tar (非圧縮) 74127360
gzip -6 segakuin.com.tar 54639263
gzip -1 segakuin.com.tar 55798062
gzip -9 segakuin.com.tar 54582925
bzip2 egakuin.com.tar 54224356

gzip -9 より bzip2 コマンドで圧縮した方が圧縮率が良い。

-9
最も遅い方法で圧縮する。ただし、圧縮率は高くなる。 (POSIX)
$ gzip -9 example.tar.gz
--best
最も遅い方法で圧縮する。ただし、圧縮率は高くなる。 (GNU)
$ gzip --best example.tar.gz
-h
ヘルプを画面に表示して、コマンドを終了する。 (POSIX)
$ gzip -h
--help
ヘルプを画面に表示して、コマンドを終了する。 (GNU)
$ gzip --help
-v
冗長モード。圧縮または解凍された各ファイルの名前と削減率を表示する。 (POSIX)
$ gzip -v example.tar
--verbose
冗長モード。圧縮または解凍された各ファイルの名前と削減率を表示する。 (GNU)
$ gzip --verbose example.tar
-V
バージョン情報を標準出力へ出力して、コマンドを終了する。 (POSIX)
$ gzip -V
--version
バージョン情報を標準出力へ出力して、コマンドを終了する。 (GNU)
$ gzip --version

終了ステータス

gzipコマンドは、以下に示す終了ステータスを返す。

gzipコマンドの終了ステータス
終了ステータス 意味
0 正常に終了
1 エラーが発生した
2 警告が発生した

エラーまたは警告が発生した場合、errno にエラー番号が格納される。

Microsoft Windows

Microsoft Windows には gzip コマンドが存在しない。ただし、PowerShell の tar コマンドを使えば、GZIP形式の圧縮ファイルを作成することができる。

C:> tar -czf archive.tar.gz folder_name/
C:> tar -czf - data.txt > data.txt.gz

関連記事

参考文献

Internet Engineering Task Force, "RFC 1952 (GZIP file format specification version 4.3)", 1996.