ずいぶん久しぶりに xz の相手をすることになったので、整理しておく。
(2022/9/7追記) 今回やろうとしていたのは .tar.xz というファイルから 必要なファイルを取り出すことだったので、 実は macOS に付属しているアーカイブユーティリティで用が足りるはずだった、 ということが分かったけれど、まあ整理しておくと何かの役に立つかもしれない。
古いメモ: 「xz (圧縮ソフト)」 (10年前に書いたこれで十分、という気もする)
xz/unxz は、ファイルの可逆圧縮・復元を行うためのソフトウェアである。 圧縮して出来たファイルのファイル名末尾は、標準で .xz となる。
macOS には含まれていないが、MacPorts や Homebrew で簡単にインストールできる、
MacPorts でインストール |
sudo port install xz |
以前から、UNIX には compress/uncompress というソフトウェアがあり (後継として gzip/gunzip, bzip2/bunzip2 があり)、 xz/unxz の使い方はそれと良く似ている。
compress/uncompress の説明 compress で圧縮すると元のファイル名の末尾に '.Z' をつけた名前になる (標準出力に出力するには -c とする)。 元に戻すには uncompress を用いる。
例えば diary0.tex と言うファイルを圧縮して元に戻すには、 次のようにする。
% ls -l diary0.tex -rw-r--r-- 1 mk staff 12143 9 4 13:24 diary0.tex % compress diary0.tex % ls -l diary0.tex* -rw-r--r-- 1 mk staff 7916 9 4 13:24 diary0.tex.Z % uncompress diary0.tex.Z % ls -l diary0.tex* -rw-r--r-- 1 mk staff 12143 9 4 13:24 diary0.tex |
xz/unxz でやってみる 同様のことを xz/unxz で行ってみる。
% ls -l diary0.tex -rw-r--r-- 1 mk staff 12143 9 4 13:24 diary0.tex % xz diary0.tex % ls -l diary0.tex* -rw-r--r-- 1 mk staff 5424 9 4 13:24 diary0.tex.xz % unxz diary0.tex.xz % ls -l diary0.tex* -rw-r--r-- 1 mk staff 12143 9 4 13:24 diary0.tex |
ファイルの可逆圧縮・復元というと、zip を思い出す人が多いと想像する。 zip は圧縮だけでなく、 複数のファイルを1つにまとめるという書庫機能も持っている。 compress/uncompress も xz/unxz も書庫機能は持っていない。 書庫機能が必要な場合は、tar というコマンドを併用するのが普通である。
書庫(archive)機能は tar を併用して実現する なんとか.tar.Z というファイルは、
tar cf なんとか.tar かんとか compress なんとか.tar(“かんとか” のところは複数のファイル (ディレクトリィを含む) が指定できる) |
逆順に
uncompress なんとか.tar.Z tar xf なんとか.tar |
compress/uncompress には gzip/gunzip という改良版があり、 現在でも良く使われている。
gzip/gunzip/zcat gzip/gunzip は compress/uncompress と同様のやり方でも使える。
% ls -l diary0.tex* -rw-r--r-- 1 mk staff 23006 9 4 13:21 diary0.tex % gzip diary0.tex % ls -l diary0.tex* -rw-r--r-- 1 mk staff 10162 9 4 13:21 diary0.tex.gz % gunzip diary0.tex.gz % ls -l diary0.tex* -rw-r--r-- 1 mk staff 23006 9 4 13:21 diary0.tex |
ちなみに gunzip は compress で圧縮したファイルも復元できる。
gzip/gunzip/zcat をリリースした GNU Project では、 tar も機能強化されて、連携が容易になっている。
tar cf なんとか.tar かんとか gzip なんとか.tar |
tar cfz なんとか.tar.gz かんとか |
.tar.Z, .tar.gz からファイルを取り出す方にも z オプションが使える。実際
gunzip nantoka.tar.gz tar xf nantoka.tar |
tar xzf nantoka.tar.gz |
tar xzf nantoka.tar.Z |
(余談) ちなみに tar がそのように機能拡張される前(大昔)は
decompress -c nantoka.tar.Z | tar xf - |
zcat nantoka.tar.Z | tar xf - zcat nantoka.tar.gz | tar xf - |
bzip2/bunzip2/bzcat gzip/gunzip/zcat に代わる bzip2/bunzip2/bzcat というのがある。 使い方は gzip/gunzip/zcat とほぼ同様である。 ファイル名の拡張子は .bz2 となる。
tar との連携では、z オプションの替わりに j オプションを使う。
tar cfj なんとか.tar.bz2 かんとか tar xfj なんとか.tar.bz2 |
bzip とか 7zip というのもあるが省略する (私は使ったことがないです)。
それで… xz/unxz/xzcat の話に戻る。 tar との連携機能は J オプションを使えば良い。 例えば
tar xfJ mplus-TESTFLIGHT-063a.tar.xz |
macOS のアーカイブユーティリティ (/System/Library/CoreServices/Applications/Archive Utility.app) は、 tar で書庫化していない、 単に xz で圧縮しただけのファイルはサポートしないが、 なぜか .tar.xz はサポートするようである。
繰り返しになるが: MacOS adds XZ-compression support
(2022/9/6)
忘れていたけど
「pigz (gzip を置き換えよう)」
というのがある。
桂田 祐史