目的 と その手順
やりたいこと
ディレクトリTest_dirを別サーバに送付したい。
ただし、容量が巨大なため、分割して送りたい。
やりたいことを実現する手順
ディレクトリをファイルにまとめる
ディレクトリTest_dirが存在しています。
まずは、duコマンドでファイルのサイズを見てみます。
$ du -s Test_dir 2341907 Test_dir $ du -sh Test_dir 2.3G Test_dir
sオプションをつけることでディレクトリ全体の集計(summarize)結果が出力でき、
hオプションをつけることで人間が読みやすい(human-readable)単位に変換してくれます。
ディレクトリ全体で約2.3GBですね。
これをtar.gzファイルにします。
tar cvfz test.tar.gz Test_dir
cオプションをつけることでアーカイブを新規に作成(create)を行い、fオプションをつけることでファイル名(file)を指定します。
vオプションをつけることで処理したファイルの一覧を標準出力に表示(verbose)します。このオプションは省略可能です。
zオプションをつけることで、アーカイブしつつgzip形式(zip)にて出力できます。
容量も小さくなっています。
$ du test.tar.gz 1809176 test.tar.gz $ du -h test.tar.gz 1.8G test.tar.gz
ちなみに、zオプションをつけずにtarにするとファイルサイズは2340540と微減していた程度でした。
ファイルを分割
今回は、ファイルtest.tar.gzを100MB単位に分割しました。
$ split -b 100m -a 2 test.tar.gz test_p_
この見方ですが、
-b 100mで100MB単位で分割することを指定しています。
-a 2 にてファイル名をaaから始まるアルファベットに指定しています。
他の分割方法に関しては割愛しますが、最後に指定した「test_p」の後ろに分割された分だけ名前をつけられてファイルが作成されます。
分割されているかを確認します。
$ ls -l | grep test_p_ -rw----r--+ 1 .. 104857600 .. test_p_aa -rw----r--+ 1 .. 104857600 .. test_p_ab -rw----r--+ 1 .. 104857600 .. test_p_ac -rw----r--+ 1 .. 104857600 .. test_p_ad -rw----r--+ 1 .. 104857600 .. test_p_ae -rw----r--+ 1 .. 104857600 .. test_p_af -rw----r--+ 1 .. 104857600 .. test_p_ag -rw----r--+ 1 .. 104857600 .. test_p_ah -rw----r--+ 1 .. 104857600 .. test_p_ai -rw----r--+ 1 .. 104857600 .. test_p_aj -rw----r--+ 1 .. 104857600 .. test_p_ak -rw----r--+ 1 .. 104857600 .. test_p_al -rw----r--+ 1 .. 104857600 .. test_p_am -rw----r--+ 1 .. 104857600 .. test_p_an -rw----r--+ 1 .. 104857600 .. test_p_ao -rw----r--+ 1 .. 104857600 .. test_p_ap -rw----r--+ 1 .. 104857600 .. test_p_aq -rw----r--+ 1 .. 70014907 .. test_p_ar
最後の切れ端だけ100MB以下になりますが、想定通り分割されています。
$ du -h test_p_aa 100M test_p_aa
別サーバに送付
Cygwinであればscpコマンド等を使えば送付できます。
分割されたファイルの結合
splitコマンドで分割したファイルの結合に関しては、おなじみのcatコマンドで行えます。
$ cat test_p_* > test2.tar.gz
今回は、わかりやすいようにファイル名test2.tar.gzにしています。
$ du test2.tar.gz 1809176 test2.tar.gz
ファイルサイズも一致しています。
*1:解凍する環境でtarがzに対応していない場合はgunzip -d でまずはgzを外します