LoginSignup
2
1

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

Last updated at Posted at 2022-03-24

さくっと xz コマンドの圧縮・解凍 (展開) 方法を・・・と思ったんですが、用途によって使い分けした方がいい感じだったので、「1ファイルの場合」「ディレクトリの場合」の2項目に分けました・・・。
tarを1ファイルに対して実行しても動きますが、tarで固められたxz(.tar.xz)になってしまうので、無駄な事をしている感が出ます。
1ファイルの場合は以下のxzコマンドの方が良いかと思います。

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 ディレクトリを圧縮/解凍するサンプル。
xz と言いながら、コマンドは tar になってますが、安心してください。Jオプションにより、xz で圧縮されます。 (ちなみに、'J'の代わりに'a'(auto)オプションでも良いようです.xzという拡張子から自動判断されます。さらに展開時は、指定すら不要で拡張子から自動判別されます。)
また、mogemoge/でも問題ないです。

圧縮(お手軽)

tar Jcvf moge.tar.xz moge

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

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

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

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

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

上記の1行書きVer.

解凍(お手軽)

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

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1