さくっと 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
という拡張子から自動判断されます。さらに展開時は、指定すら不要で拡張子から自動判別されます。)
また、moge
はmoge/
でも問題ないです。
圧縮(お手軽)
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