巨大ディレクトリの分割圧縮

4678 ワード

巨大ディレクトリの分割圧縮

概要

大量のファイル、大量のディレクトリがあるディレクトリを tar で圧縮を有効にして固めると激しく CPU、メモリを消費してなかなか完了しません。tar + split + 圧縮コマンド(ここでは zstd) を使用することで比較的速く圧縮しながら固めることができます。

tar に固めながら split コマンドで分割することで一回当たりの圧縮対象を小さく抑えながら圧縮することで処理時間を節約できます。

結論

最終形のコマンド例

カレントディレクトリ以下を tar で固めながら 1GB ずつに分割して各ファイルを zstd で圧縮して、../target.tar000.zst, ../target.tar001.zst, ../target.tar002.zst, ... に出力する場合のコマンド例

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

アーカイブ対象から特定のファイルやファルダを除外する場合は tar -cf - . の部分で tar --exclude='*.sock' -cf - . など、 --exclude= で除外指定します。

分割圧縮したファイルの解凍

圧縮したファイルzstを列挙して zstdcat で標準出力に一括で出力して tar xvf で展開する。
tar xvfv は省略可能。

mkdir temp
cd temp
ls ../*.zst | xargs zstdcat | tar xvf -

説明

zstd

大量のデータを高速に圧縮するために faceboook の zstd を使います。

インストール方法 (ubuntu 21.10)

以下でインストールできます。

sudo apt install -y zstd

参考