サイトアイコン puti se blog

Linuxで圧縮しながら分割するコマンド

Linuxのコマンドで、圧縮しながら一定のファイルサイズで分割できるコマンドを紹介します。
出力されるファイルサイズに制限がある時に、使用したりします。

環境・前提条件

レンタルサーバーのロリポップで、毎日cronでzipバックアップを行っていたのですが、
ある日突然、zip作成が失敗するようになりました。

確認したところ、一定のファイル出力を行うと、プロセスがkilledされてしまうようでした。
そこで、zipコマンドの代わりに、今回の圧縮しながらファイル分割をするコマンドを実施しエラーを回避しました。

結論、tarとsplitコマンドで圧縮しながら出力ファイルをファイルサイズでファイル分割する

tar czvf - (圧縮元フォルダ名) | split -d -b 1G - (圧縮先ファイル名).tar.gz

tarコマンドで圧縮しながら、パイプでsplitコマンドで渡し同時にファイル分割します。

こちらの方法で、ロリポップサーバー上の出力ファイルサイズ制限問題をクリアしました。
オプションについては、以下で説明します。

tarコマンドのczvfオプション

アーカイブコマンドのtarコマンドはオプションが多く、いつも毎回調べないと忘れてします。
今回のczvfはよく使うオプションですね。

fオプションのアーカイブファイル名を「-」とした場合は、出力をパイプにつないでくれる。

czvfから解凍しアーカイブを取り出すオプションは、xzvf。

czvfのアーカイブの中身が何が入っているか見るオプションは、tzvf。

splitコマンドのオプション

-bオプションのサイズの単位には、

KB 1000, K 1024, MB 1000*1000, M 1024*1024, and so on for G, T, P, E, Z, Y.

が使用出来る。

圧縮分割ファイルされたtar.gzを解凍してアーカイブから取り出す方法

cat 分割ファイル名(連番)* | tar xzvf -

上記のように分割されたファイルをアスタリスクでcatでつないでも、
catで順番に分割されたファイルを指定してもOK。
その順番通り結合された内容を、パイプでtarにつなぎxzvfで取り出す。

取り出すときは、カレントディレクトリに出力されるが、
-Cオプションを指定すれば出力先も指定できる。

【注意】zip圧縮には最大容量制限がある

実は、zipの圧縮には最大容量制限があるので注意が必要です。

厄介なのは圧縮は正常に出来るが解凍できない

という点ですね。まさに注意が必要ですね。

このファイルサイズになった場合は、扱いに注意しましょう。

zip64形式ならば上記ファイルサイズを超えて使用出来ますが、まだ対応していないケースも多いようなので、ファイルサイズが大きい圧縮の場合はzipを使用しない方が良いでしょう。

モバイルバージョンを終了