スポンサーリンク

このドキュメントの内容は、以下の通りです。

はじめに

ファイル圧縮は非常に便利です。ものによりますが、大きなファイルが小さくなります。小さくなると何がうれしいかというと、ストレージの消費量が少なくてすみますし、データを転送する場合は、データの転送量が少なくなります。つまり、経済的だということです。

Unixでファイルの圧縮や解凍を行う方法について説明します。今回は、gzipgunzipです。

gzipとは

Unixでファイルの圧縮や解凍には、gzipコマンドがよく利用されます。
gzipは、GNU zip の略です。GNUプロジェクトによって、開発・メンテン餡巣が行われています。

圧縮ファイルを元に戻すときには、解凍といわれたり、展開といわれたりします。

圧縮率の高さを重視する場合には、 bzip2 (.bz2) や xz (.xz) などが利用されます。GNU tar 1.22 から xz圧縮(--xzオプション)がサポートされています。

gzipの読み方


gzipの読み方は、 じー・じっぷです。
gunzipの読み方は、 じー・あん・じっぷです。

gzipコマンドの圧縮方式


gzipコマンドは、Lempel-Zivコーディング(LZ77) と呼ばれるアルゴリズムを使用します。

圧縮ファイルの拡張子


拡張子には、 .gzが利用されます。 歴史的には、 gzip の初期には .Zの拡張子を利用していた時代もあります。

gzip は、 tar と一緒に利用されることも多いのではないかと思います。 gzip で圧縮された tarアーカイブの場合、.tar.gz や .tgz になります。

gzipとgunzipの違い


gzip と gunzip には以下の違いがあります。

  • gzip は、圧縮と展開に使われます。
  • gunzip は、展開に使われます。
FreeBSD には /usr/bin/gzip と /usr/sbin/gunzip があります。ファイルはハードリンクのため、inode番号が同じです。当然 cmp で比較しても、同じです。

Ubuntu の場合だと /bin/gzip と /bin/gunzip がありますが、これは、inode番号が異なります。また、ファイルサイズも異なります。ファイルサイズが大きくことなるため、シェルスクリプトなんだろうな、と思って調べてみると案の定シェルスクリプトでした。

 $ file /bin/{gunzip,gzip}
/bin/gunzip: POSIX shell script, ASCII text executable
/bin/gzip:   ELF 64-bit LSB shared object, x86-64, version 1 (SYSV),
		dynamically linked,
		interpreter /lib64/l,
		for GNU/Linux 2.6.32,
		BuildID[sha1]
		=c20fb9a4202c4dca13f13860b1be723d28d18c11,
		stripped

gunzip のシェルスクリプトは、内部的には gzip -d コマンドを実行(exec)するだけのものです。

OS によっても、このように実装方法が異なります。

gzipの書式


gzipコマンドは、以下の書式で利用します。
gzip オプション ファイル

gunzipコマンドは、以下の書式で利用します。
gunzip オプション ファイル

gzipコマンドのオプション一覧


gzipコマンドのオプションは以下の通りです。

オプション 説明
-a アスキーテキストモードで、非Unixなシステムで、圧縮時に CR LF が LF に変換され、伸長時に LF が CR LF に変換される。
-c 標準出力に書き出し、元のファイルを変更しない
-d 伸長する(解凍・展開)
-f ファイルが存在しても、強制的に上書きする
-h ヘルプを表示する
-l 圧縮されたそれぞれのファイルの情報を表示する。圧縮ファイルサイズ、伸長されたファイルサイズ、圧縮率、伸長されたファイル名
-n デフォルトでは、圧縮時に名前とタイムスタンプを保存させない。
-N 圧縮時に名前とタイムスタンプを保存する。
-q すべての警告を抑制する
-r ディレクトリを再帰的にアクセスする。
-S .suf 拡張子 .gz の代わり、.suf で指定した拡張子を使う。-S "" で拡張子なしにもできる。
-t 圧縮ファイルの整合性をチェックする
-v 詳細を表示する。圧縮・伸長される各ファイルの名前と圧縮率を表示する。
-V バージョン番号とコンパイルオプションを表示して終了する
-# #で指定した数字で、圧縮のスピードを変更する。-1は最速の圧縮法を使う。-9は圧縮率が一番高いが一番遅い圧縮法を使う。デフォルトでは-6。

元のファイルを残さずにファイルを圧縮する場合

まず、ファイルを圧縮する方法を説明します。ここでは、 a.txt を圧縮します。以下のコマンドラインで gzip コマンドを実行する場合、a.txt がなくなり、a.txt.gz ができます。
gzip a.txt

元のファイルを残して圧縮する場合

元のファイルがなくなってしまうのが嫌な場合は、 gzip の -cオプションを使用します。gzipコマンドを実行すると、標準出力に圧縮データが出力されるので、リダイレクトして、別のファイルに書き出します。
-cオプションは、標準出力(stdout)に出力するオプション。
gzip -c a.txt > a.gz

圧縮ファイルを展開する方法


a.gz のファイルがあり、これを解凍する例です。以下のコマンドを実行した場合、 a.gz のファイルがなくなるので注意してください。
gzip -d a.gz

gunzipコマンドで展開することもできます。 gunzip は、-d オプションを指定する必要はありません。
gunzip a.gz

複数のファイルを別々に圧縮する方法


例えば、以下のファイル、ディレクトリがあったとします。
./foo
./foo/a.txt
./foo/b.txt
./bar
./bar/c.txt
./bar/d.txt
./1.txt
./2.txt

上記のそれぞれのファイルを1つずつ gzip で圧縮する場合には、以下のコマンドを実行します。 -r オプションは、リカーシブ(再帰的)に実行します。以下のコマンドの場合、カレントディレクトリ以下のファイルたちすべてが対象になります。

gzip -r .

このように、1つ1つの gz ファイルが作成されます。

.
./foo
./foo/a.txt.gz
./foo/b.txt.gz
./bar
./bar/c.txt.gz
./bar/d.txt.gz
./1.txt.gz
./2.txt.gz

複数のファイルを別々に展開する方法

それぞれのファイルを展開する場合には、以下のコマンドを実行します。カレントディレクトリ以下のファイルが解凍されます。
gzip -r -d .

元の圧縮ファイルを残して展開する方法

圧縮ファイル a.gz がなくなっては困る場合は、以下のコマンドラインを実行します。gzip コマンドが、展開したデータを標準出力へ出力します。出力されたデータをリダイレクトで、 a.txt ファイルに書き出します。
gzip -c -d a.gz > a.txt

展開するときに既存ファイルを上書きする方法 -fオプション


gzip コマンドは、展開するファイルがすでにあるとき、上書きするのか、確認をします。
% gzip -d a.gz
gzip: a already exists; do you wish to overwrite (y or n)?

gzip コマンドを -f オプション(force) を指定して実行する場合、何も聞かずに上書きします。
% gzip -f -d a.gz

-cオプションには別名があります


-cオプションは、--stdoutや--to-stdoutと指定することができます。

複数のファイルやディレクトリをまとめて圧縮する場合

複数のファイルやディレクトリを1つのアーカイブにまとめて圧縮したい場合には、 tar コマンドを併用します。
圧縮したいファイルが、hoge というディレクトリにある場合は、以下のコマンドで圧縮します。

% tar zcfp hoge.tar.gz hoge

カレントディレクトリに hoge.tar.gz が作成されます。

hoge.tar.gz を解凍する場合には、以下のコマンドを実行します。
tar zxfp hoge.tar.gz

この場合、カレントディレクトリに hoge が作成されます。

hoge.tar.gz に含まれるファイルを確認するには、以下のコマンドを使用します。
% tar ztf hoge.tar.gz

tarコマンドの使い方

ここでは、簡単な tar の使い方を取り上げましたが、より詳しい tarコマンドの使い方については、 [2008-07-09-2] をご参照ください。

xz圧縮との圧縮率の違い


xz圧縮方式は、tar.gzに比べて40%のサイズまで圧縮効率が向上しています。

xzの使い方


xzで圧縮する場合には、 -z オプションを利用します。

foo.txt を圧縮する場合は、以下のコマンドを実行します。
以下のコマンドの場合は、gzipコマンドと同様に、圧縮前のファイル foo.txt はなくなります。
xz -z foo.txt

上記を実行した場合、 foo.txt.xz が作成されます。

foo.txt.xz を伸長する場合は、-d オプションを使用します。
xz -d foo.txt.xz

foo.txt が作成され、 foo.txt.xz は削除されます。

圧縮前のファイルを消さずに残す場合には、 gzip コマンドと同様に -c オプションを利用します。 -c オプションを使う場合は、リダイレクトも併用します。
xz -c -z foo.txt > foo.xz
参照しているページ (サイト内): [2008-07-09-2]

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー