xzコマンドの使い方(さくっと)


さくっと xz コマンドの圧縮・解凍 (展開) 方法を・・・と思ったんですが、用途によって使い分けした方がいい感じだったので、「お手軽」「1ファイルの場合」「ディレクトリの場合」の3項目に分けました・・・。
ともかく手軽に使いたい人は最初、ファイルが大きくて遅いから高速化したいとか色々ある方は後ろの方、を読んでください。

お手軽

ともかく圧縮・解凍したい人はこちら。

圧縮

tar Jcvf moge.tar.xz moge

ディレクトリの場合、mogemoge/でも問題ないです。

解凍

tar xvf moge.tar.xz

概要説明

xz と言いながら、コマンドは tar になってますが、安心してください。
-J によって、xz による圧縮が行われます。
このサンプルでは、ファイルでもディレクトリでもOKです。

1ファイルの場合の色々

hoge.txt を圧縮/解凍するサンプル。
(xz はデフォルトで元ファイルを削除するので-kを付けて抑制しています。)

圧縮(手軽)

xz -kv hoge.txt

圧縮(高速)

xz -kvT0 hoge.txt

マルチスレッドで圧縮します。

圧縮(圧縮率最高)

xz -kv9T0 hoge.txt

6以上の数字を指定すると、圧縮率が上がります。4以下はその逆。時間とのトレードオフ。

解凍(手軽)

unxz -k hoge.txt.xz

xz -dk でも良いです。

解凍(高速)

unxz -kT0 hoge.txt.xz

マルチスレッドで解凍します。

ディレクトリの場合の色々

moge ディレクトリを圧縮/解凍するサンプル。

圧縮(1コマンド)

tar Jcvf moge.tar.xz moge/

-Jにより、xz で圧縮されます。

圧縮(個別コマンド,高速)

tar cvf moge.tar moge/
xz -vT0 moge.tar

tar はマルチスレッド動作出来ないようなので、こうするとマルチスレッドで圧縮出来ます。

圧縮(個別コマンド,高速 を1行で)

tar cvf moge.tar moge/ && xz -vT0 moge.tar

上記の1行書きVer.

解凍(1コマンド)

tar xvf moge.tar.xz

解凍(個別コマンド,高速)

unxz -kT0 moge.tar.xz
tar xvf moge.tar
rm moge.tar

解凍もマルチスレッドでやる場合は分ける必要があります。
tar ファイルがゴミ的に生成されるので、最後に消しています。

解凍(個別コマンド,高速 を1行で)

unxz -kT0 moge.tar.xz && tar xvf moge.tar && rm moge.tar

上記の1行書きVer.

xz, unxz コマンドの補足解説

高圧縮で、マルチスレッド処理に対応しています。gzip と比べると遅いです。
(zip → 7z と tar.gz → tar.xz は、ほぼ同じイメージですね。速度優先ならzip/gz、圧縮率優先なら 7z/xz)
xz コマンドは標準入力に対応していますが、ターミナルからの入力には非対応なので、tarから|で繋いで入力することは出来ないようです。

-d
(xz コマンドのみ)
解凍。unxz を使いたくない場合にどうぞ。未指定なら圧縮。

-k
圧縮前のファイルを残す。指定しない場合、元ファイルが削除されます。

-v
詳細を表示。数千ファイルになると表示しない方が速いと思います。

-0 ~ -9
(xz コマンドのみ)
圧縮率 低~高。未指定だと 5 になるもよう。
(手元の環境だと、 6 は 5 と同じになりましたが、偶然かも。)

-f
強制実行。未指定だと、同じファイル名が既にあると失敗。

-T0
マルチスレッドで実行(スレッド数自動)
-T4 にすると4スレッド実行

tar コマンドの補足

-J
xz を透過する(xz 圧縮をかける)。
(GNU tar 1.22以降)

tar.xzに圧縮する - FreeBSD入門
https://kaworu.jpn.org/freebsd/tar.xz%E3%81%AB%E5%9C%A7%E7%B8%AE%E3%81%99%E3%82%8B

暗黙に圧縮率指定 6 くらいになるみたい? 手元環境では、個別のコマンドでやるより小さくなりました。-jなら、bzip2。
また、解凍は指定無しで大丈夫みたい(勝手に認識して解凍までやってくれる)。

-c
アーカイブを作成(圧縮する時に指定)。

-x
アーカイブを展開(解凍する時に指定)。

-v
詳細を表示。数千ファイルになると表示しない方が速いと思います。

-f
ファイル出力する(標準出力しない)。
厳密には違うらしい。以下参照。

tarでアーカイブを作るときの fオプション がないときの挙動を調べたことまとめ - nwtgck / Ryo Ota
https://scrapbox.io/nwtgck/tar%E3%81%A7%E3%82%A2%E3%83%BC%E3%82%AB%E3%82%A4%E3%83%96%E3%82%92%E4%BD%9C%E3%82%8B%E3%81%A8%E3%81%8D%E3%81%AE_f%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3_%E3%81%8C%E3%81%AA%E3%81%84%E3%81%A8%E3%81%8D%E3%81%AE%E6%8C%99%E5%8B%95%E3%82%92%E8%AA%BF%E3%81%B9%E3%81%9F%E3%81%93%E3%81%A8%E3%81%BE%E3%81%A8%E3%82%81

-z
gzip 等を通して実行
これは、15年くらい前から指定しなくてもよくなってるらしいです。
(GNU tar 1.15(2004年12月リリース)以降)

「tar zxvf」を使うのはオジサンだけ!?自動で認識されるので「z」「j」「J」の指定は不要!
https://linuxfan.info/tar-z-option