巨大ディレクトリの圧縮 (分割なし)

2391 ワード

巨大ディレクトリの圧縮 (分割なし)

https://zenn.dev/mtmatma/articles/011884abd7a5a8 の記事で以下のコマンドで分割圧縮の方法を紹介しましたが、

tar -cf - . | split -a 3 -d -b 1G --filter='zstd > $FILE.zst' - ../target.tar

高速に処理できた理由は単に、zstd を使用して圧縮したための模様です。

コマンド (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 上記以前)

  • この方法は一番汎用的です。
  • 標準入力⇒標準出力の圧縮に対応しているソフトであれば、なんでも利用可能です。
  • zstd の部分を好きなものに置き換えることで対応できるので汎用的です。
tar -cf - . | zstd > ../target.tar.zst
  • https://qiita.com/oioi_tec/items/e66ec93824f694a473c9 に載っていた方法だと一度ファイルに保存してから圧縮するので巨大ファイルの場合にオーバーヘッドが大きくなるので標準出力からパイプで zstd に渡してファイルに保存します。

備考 (zstd のインストール方法)

sudo apt install -y zstd