GNU tar の「xz圧縮」を試してみる

[日記]

きょう、はてブを眺めていたら、「xz圧縮がすごい」的な流れを感じたので試してみたくなりました。

- gzipの代わりにxzを使おう | Okumura's Blog
-- http://oku.edu.mie-u.ac.jp/~okumura/blog/node/2409

GNU coreutils をソースからコンパイルしようとしてびっくり。coreutils-7.3.tar.gz (9690396バイト) 以外に coreutils-7.3.tar.xz (4045980バイト) が置いてある。*.xz は *.gz の42%のサイズしかない。


なんだってー!!

ということで、早速試してみました。

GNU tar 1.22 をインストール



- Tar - GNU Project - Free Software Foundation (FSF)
-- http://www.gnu.org/software/tar/

ほんとに「xz圧縮」がサポートされてるのかな、と更新情報を眺めると確かに書いてありました。

# Support for xz compression (--xz option)
# Short option -J is reassigned as a shortcut for --x


おお。すばらしい。

早速、以下からソースコードをダウンロード。

- Index of /gnu/tar
-- http://mirrors.kernel.org/gnu/tar/

そんで、解凍して、configure、make、sudo make installしました。

確認。

$/usr/local/bin/tar --version
tar (GNU tar) 1.22
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

作者: John Gilmore, Jay Fenlason.


XZ Utils 4.999.8beta をインストール


tar がxz圧縮をサポートしても、XZ Utilsが入ってないと「xzを実行できないし」とか言われて圧縮できないので、XZ Utilsをインストールします。

- 4.999.8beta.tar.gz
-- http://tukaani.org/xz/

Latest releaseの圧縮ファイルをダウンロードしてきて、解凍して、configure、make、sudo make installして確認。

usr/local/bin/xz --version
xz 4.999.8beta
liblzma 4.999.8beta


いざ、XZ圧縮


「xz圧縮」を試す対象として、結構好きなHyper Estraierを使うことにしました。

- Hyper Estraier
-- http://hyperestraier.sourceforge.net/index.ja.html

そんで、最新版をダウンロードしてきました。

-rw-rw-r-- 1 foo bar 1014600 2007-12-25 10:52 hyperestraier-1.4.13.tar.gz


で、これを解凍します。

$ /usr/local/bin/tar xfvz ./hyperestraier-1.4.13.tar.gz
$ ls -al
drwxr-xr-x 16 500 500 4096 2007-12-25 10:53 hyperestraier-1.4.13/
-rw-rw-r-- 1 foo bar 1014600 2007-12-25 10:52 hyperestraier-1.4.13.tar.gz


解凍されましたね。

これを、「xz圧縮」しますよ。

「xz圧縮」には、-Jオプションを使え!と書いてあったので使います。
普段圧縮に使ってるcオプションの前に、Jって付けるだけ。

/usr/local/bin/tar Jcfv ./hyperestraier-1.4.13.tar.xz ./hyperestraier-1.4.13


あっと言う間に、圧縮されました。時間とかどうでもいいよ。今回は。

では、いざ確認。

$ ls -al
drwxr-xr-x 16 500 500 4096 2007-12-25 10:53 hyperestraier-1.4.13/
-rw-rw-r-- 1 foo bar 1014600 2007-12-25 10:52 hyperestraier-1.4.13.tar.gz
-rw-rw-r-- 1 foo bar 597880 2009-04-22 14:44 hyperestraier-1.4.13.tar.xz


おおお!

597880 ÷ 1014600 = 0.589...だから、tar.xzにしたら、tar.gzのときの6割の領域で同じデータを表現できているわけですね。

これは、素晴らしいなぁ。

解凍のときも、xオプションの前にJを付けておきましょう。

$ /usr/local/bin/tar Jxfv ./hyperestraier-1.4.13.tar.xz


解凍もちゃんとできました。


-

評判通り、GNU tar の「xz圧縮」の圧縮率は高かったです。

一方、tarのバージョンや、XZ Utilsのインストールのしやすさなどは、環境により異なる気がするので、「xz圧縮」は当面、標準にならない気がします。

とはいえ、この圧縮率の高さは魅力的です。

XZ Utilsに含まれるxzcatは、zcatのように利用できるので、将来、頻繁に解凍する必要のないファイルの圧縮などに使うと、小さくなって欲しいものが小さくなって嬉しそうです。

投稿者:としのり  日時:23:59:59 | コメント | トラックバック() |