2009-05-07 Thu
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
# 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.
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 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
$ 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
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 | パーマリンク | コメント | トラックバック() |

