Linux/UNIXでCUIからファイルの分割(+圧縮)保存を行う
Pocket

諸事情があって、圧縮したアーカイブファイルを分割して補完しておく必要が出たので、その備忘。
といっても、そんな大した事やるわけではなく、昔からあるsplitコマンドでの手法。

Linux/UNIXの場合は、splitコマンドを使えばいい。
以下のようにコマンドを実行することで、ファイルを圧縮しながら分割保存させることが出来る。

tar czvf - /アーカイブ化するディレクトリ | split -d -b 分割するバイト数 - 分割後のファイル名(連番)
[root@localhost work_1]# ls -l /work_1/
合計 307200
-rw-r--r--. 1 root root 104857600  2月  7 04:26 test1
-rw-r--r--. 1 root root 104857600  2月  7 04:26 test2
-rw-r--r--. 1 root root 104857600  2月  7 04:26 test3
[root@localhost work_1]#
[root@localhost work_1]# tar czvf - /work_1 | split -d -b 100K - /tmp/test_work_1_
tar: メンバ名から先頭の `/' を取り除きます
/work_1/
/work_1/test1
/work_1/test2
/work_1/test3
[root@localhost work_1]#
[root@localhost work_1]# ls -lh /tmp/test_work_1_0*
-rw-r--r--. 1 root root 100K  2月  7 04:44 /tmp/test_work_1_00
-rw-r--r--. 1 root root 100K  2月  7 04:44 /tmp/test_work_1_01
-rw-r--r--. 1 root root  99K  2月  7 04:44 /tmp/test_work_1_02

 

既存のファイルを分割する場合は、以下のようにコマンドを実行すれば良い。

split -d -b 分割するバイト数 分割元ファイル 分割後のファイル名(連番)
Sponsored Links

で、元に戻す方法だが、これは簡単。
単に、catで分割したファイルを一括で読込し、それを別ファイルにリダイレクトで書き出すだけだ。

cat 分割後のファイル名(連番)* > 元に戻す際のファイルPATH

 

そのまま解凍する場合は、パイプで繋いで以下のようにコマンドを実行すれば良い。

cat 分割後のファイル名(連番)* | tar xzvf -
[root@localhost work_1]# cat /tmp/test_work_1_0* | tar xzvf -
work_1/
work_1/test1
work_1/test2
work_1/test3
[root@localhost work_1]#
[root@localhost work_1]# ls -lah work_1/
合計 300M
drwxr-xr-x. 2 root root   42  2月  7 17:02 .
drwxr-xr-x. 3 root root   55  2月  7 17:03 ..
-rw-r--r--. 1 root root 100M  2月  7 04:26 test1
-rw-r--r--. 1 root root 100M  2月  7 04:26 test2
-rw-r--r--. 1 root root 100M  2月  7 04:26 test3

 

 

 

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。