💨
巨大ディレクトリの圧縮 (分割なし)
巨大ディレクトリの圧縮 (分割なし)
https://zenn.dev/mtmatma/articles/011884abd7a5a8 の記事で以下のコマンドで分割圧縮の方法を紹介しましたが、
tar -cf - . | split -a 3 -d -b 1G --filter='zstd > $FILE.zst' - ../target.tar
高速に処理できた理由は単に、zstd
を使用して圧縮したための模様です。
- https://qiita.com/nishemon/items/818cc64dc2f8577edd87 による圧縮速度の比較があります。
- 従来使用することが多い bzip2 圧縮や gzip 圧縮に比べて zstd 圧縮はその数倍速いです。
- 巨大ファイルになることでその差が顕著に出ただけで、分割したことによる影響ではないと考えられます。
-
https://qiita.com/oioi_tec/items/e66ec93824f694a473c9 によると tar 1.31以降では zstd の圧縮オプション
a
に対応しています。
コマンド (tar 1.31 以降)
シンプルに a
オプションを指定して以下で巨大ディレクトリを圧縮しても十分高速です。
すくなくとも https://zenn.dev/mtmatma/articles/011884abd7a5a8 の記事で紹介したほう方法と変わりません。
tar -acf ../target.tar.zst .
tar 内部で zstd コマンドを呼んでいるだけなので zstd のインストールが必要です。
コマンド (tar 1.22以降)
tar -Izstd -cf ../target.tar.zst .
- tar 1.34 で動作するのを確認しましたが tar 1.22 ~ tar 1.30 では確認はしてません。
- https://qiita.com/oioi_tec/items/e66ec93824f694a473c9 からの受け入りです。
コマンド (tar 上記以前)
- この方法は一番汎用的です。
- 標準入力⇒標準出力の圧縮に対応しているソフトであれば、なんでも利用可能です。
-
zstd
の部分を好きなものに置き換えることで対応できるので汎用的です。
tar -cf - . | zstd > ../target.tar.zst
- https://qiita.com/oioi_tec/items/e66ec93824f694a473c9 に載っていた方法だと一度ファイルに保存してから圧縮するので巨大ファイルの場合にオーバーヘッドが大きくなるので標準出力からパイプで zstd に渡してファイルに保存します。
備考 (zstd のインストール方法)
sudo apt install -y zstd
Discussion