年々サーバのメモリサイズが大きくなって、DumpやCoreを取得すると何十GBとかになってしまいます。
サポートに送りつけるにも大きすぎたりするので、障害対応とかのときに使ってます。
- 目次 -
基本的な使い方
大容量のファイルを分割します。
分割方法はオプションで分割方法を指定します。
なにも指定しないと1000行単位で、「xaa」「xab」…の順でファイルが生成されます。
実行例:
$ splitlongfile.txt$ ls -lh
-rw-rw-r--. 1 user group 70464 1月 5 13:42longfile.txt
-rw-rw-r--. 1 user group 28922 1月 5 13:47 xaa
-rw-rw-r--. 1 user group 30121 1月 5 13:47 xab
-rw-rw-r--. 1 user group 11421 1月 5 13:47 xac
$ wc -l*longfile.txt
2251longfile.txt
1000aax
1000abx
251 xac
主なオプション
| オプション | 説明 |
|---|---|
-b SIZE[K|M|G] | 指定したバイト単位で分割(キロ(K)、メガ(M)、ギガ(G)単位指定も可能) |
-l NUM | 指定した行数ごとに分割 |
-d | 数字の接尾辞を使用 (00, 01, …) |
-n NUM | 指定した数に分割 |
-b : バイト単位で分割
指定したバイトサイズごとにファイルを分割できます。
実行例:
$ split -b 10M largefile.txt small_
largefile.txt を 10MB ごと に分割し、small_ という接頭辞を付けたファイル(small_aa, small_ab, …)として出力します。
$ ls -lh
-rw-rw-r--. 1 user group 45M 1月 5 13:30largefile.txt
-rw-rw-r--. 1 user group 10M 1月 5 13:38aasmall_
-rw-rw-r--. 1 user group 10M 1月 5 13:38absmall_
-rw-rw-r--. 1 user group 10M 1月 5 13:38acsmall_
-rw-rw-r--. 1 user group 10M 1月 5 13:38adsmall_
-rw-rw-r--. 1 user group 5M 1月 5 13:38aesmall_
-l : 行単位で分割
指定した行数ごとに分割できます。
実行例:
$ split -l 100 longfile.txt part_
largefile.txt を 100 行ごと に分割し、part_ という接頭辞を付けたファイル(part_aa, part_ab, …)として出力します。
$ ls -l
-rw-rw-r--. 1 user group 7045 1月 5 13:42longfile.txt
-rw-rw-r--. 1 user group 2001 1月 5 13:47aapart_
-rw-rw-r--. 1 user group 2612 1月 5 13:47abpart_
-rw-rw-r--. 1 user group 1451 1月 5 13:47acpart_
-rw-rw-r--. 1 user group 981 1月 5 13:47adpart_
$ wc -llongfile.txt
342longfile.txt
$ wc -l part_*
100 part_aa
100 part_ab
100 part_ac
42 part_ad
数字のサフィックスを使う
デフォルトでは aa, ab, ac, ... のようなアルファベットの接尾辞が付きますが、-d オプションを使うと 数字 にできます。
実行例:
$ split -l 100 -d longfile.txt part_
500 行ごとに , 01part_2, 0part_3, … というファイルを作成します。0part_
$ ls -l
-rw-rw-r--. 1 user group 7046 1月 5 13:42longfile.txt
-rw-rw-r--. 1 user group 2002 1月 5 13:4701part_
-rw-rw-r--. 1 user group 2612 1月 5 13:4702part_
-rw-rw-r--. 1 user group 1451 1月 5 13:4703part_
-rw-rw-r--. 1 user group 981 1月 5 13:4704part_
$ wc -llongfile.txt
342longfile.txt
$ wc -l part_*
100 part_01
100 part_02
100 part_03
42 part_04
ファイルを一定の数に分割
-n オプションを使うと、ファイルを等サイズに 指定した数 に分割できます。
実行例:
$ split -n 5 longfile.txt part_
largefile.txt を 5 分割 し、chunk_aa, chunk_ab, … というファイルとして出力します。
$ ls -l
-rw-rw-r--. 1 user group 7045 1月 5 13:42longfile.txt
-rw-rw-r--. 1 user group 1409 1月 5 13:47aapart_
-rw-rw-r--. 1 user group 1409 1月 5 13:47abpart_
-rw-rw-r--. 1 user group 1409 1月 5 13:47acpart_
-rw-rw-r--. 1 user group 1409 1月 5 13:47adpart_
-rw-rw-r--. 1 user group 1409 1月 5 13:47aepart_
圧縮ファイルを分割
例えば、大きなログファイルを圧縮して分割する場合、以下のように使えます。
実行例:
$ gzip -c largefile2.txt | split -b 5M - largefile2.gz_
この場合、largefile2.txt を gzip で圧縮しながら 5MB ごと に largefile2.gz_aa, largefile2.gz_ab, … として保存します。
$ ls -lh
-rw-rw-r--. 1 user group 1.1G 1月 5 13:42largefile2.txt
-rw-rw-r--. 1 user group 5M 1月 5 13:47largefile2.gz_aa
-rw-rw-r--. 1 user group 5M 1月 5 13:47largefile2.gz_ab
-rw-rw-r--. 1 user group 1M 1月 5 13:47largefile2.gz_ac
分割したファイルを結合する
分割したファイルは cat コマンドで元に戻せます。
実行例:
cat small_* > mergedfile.txt
圧縮ファイルの場合:
cat largefile.gz_* | gunzip > originalfile.txt
実用例
- 外部保存やファイルシステム制限
USB の容量制限や、ファイルシステムの制限(例: FAT32 の 4GB 制限)対策。 - ログ解析
長大なログファイルを分割して並列処理など。 - データの転送
大きなファイルを小さく分割し、分割したデータを複数回に分けて転送する場合。



コメント