「ファイルが大きすぎてメールに添付できない」
Linuxサーバーの運用では、数GB単位のログファイルを扱うことも珍しくありません。こうした場面で活躍するのがファイル分割コマンドです。
この記事では、
split コマンドの実践的な使い方を解説します。行数やサイズでの分割から、プリフィックス指定、
cat での結合、csplit との違いまで網羅しました。・-l オプションで行数指定(例: split -l 5000 access.log log_)、-b でバイト数指定
・プリフィックスを付けると分割ファイルの名前を整理しやすい(xaa→log_aa等)
・分割したファイルは cat で結合して元に戻せる(cat log_* > access_all.log)
・パターンで分割したい場合は csplit、数値サフィックスを付けたい場合は --numeric-suffixes オプションが便利
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
splitコマンドとは?ファイル分割の仕組み
split は、1つのファイルを指定した行数やバイト数で複数のファイルに分割するコマンドです。分割されたファイルは、デフォルトで
xaa、xab、xac ... という名前で作成されます。先頭の x がプリフィックス(接頭辞)、aa 以降がサフィックス(接尾辞)です。基本構文は以下の通りです。
# split (オプション) ファイル名 (プリフィックス)
splitコマンドの基本的な使い方
1. 行数を指定して分割する(-l)
最もよく使う方法です。ログファイルを一定行数ごとに分割したい場合に使います。# messages.logを5000行ごとに分割する $ split -l 5000 messages.log $ ls x* xaa xab xac xad xae # 分割されたファイルの行数を確認する $ wc -l xaa 5000 xaa
2. サイズを指定して分割する(-b)
-b オプションでバイト数を指定します。K(キロバイト)、M(メガバイト)、G(ギガバイト)の単位が使えます。# 100MBごとに分割する $ split -b 100M large-backup.tar.gz # 1GBごとに分割する $ split -b 1G database-dump.sql
3. プリフィックスを指定する
デフォルトのx ではなく、分かりやすい名前を付けられます。# プリフィックスを「messages_」にして分割する $ split -l 5000 messages.log messages_ $ ls messages_* messages_aa messages_ab messages_ac
_ や . を付けておくと、元のファイルと区別しやすくなります。4. サフィックスを数字にする(-d)
デフォルトのアルファベット(aa, ab, ac)ではなく、数字(00, 01, 02)にできます。# サフィックスを数字にして分割する $ split -d -l 5000 messages.log messages_ $ ls messages_* messages_00 messages_01 messages_02
分割ファイルを結合する
分割したファイルを元に戻すには、cat コマンドとリダイレクトを組み合わせます。# ワイルドカードで結合する $ cat messages_* > messages_merged.log # 結合後にファイルサイズを比較して確認する $ ls -l messages.log messages_merged.log
* はアルファベット順・数字順に展開されるので、分割ファイルは正しい順番で結合されます。【重要】結合時の注意点
・バイナリファイル(tar.gz、RPM等)の場合、結合後にmd5sum で元ファイルとハッシュを比較してください・
-b(バイト分割)で分割したテキストファイルは、行の途中で切れている可能性があります# ハッシュ値で元ファイルと一致しているか確認する $ md5sum original.tar.gz d41d8cd98f00b204e9800998ecf8427e original.tar.gz $ md5sum merged.tar.gz d41d8cd98f00b204e9800998ecf8427e merged.tar.gz
応用・実務Tips
1. 拡張子を付けて分割する(--additional-suffix)
分割ファイルに拡張子を付けておくと、ファイルの種類が分かりやすくなります。# .log拡張子を付けて分割する $ split -d -l 5000 --additional-suffix=.log messages.log part_ $ ls part_* part_00.log part_01.log part_02.log
2. 巨大ログファイルの分割解析
数十GBのログファイルを直接grep するのは時間がかかります。分割してから並列処理すると効率的です。# ログを分割する $ split -l 100000 access.log chunk_ # 分割ファイルごとにgrepする(バックグラウンドで並列実行) $ for f in chunk_*; do grep "ERROR" > result_ & done $ wait $ cat result_chunk_* > errors.log
3. メール添付やファイル転送用の分割
メールの添付ファイルサイズに制限がある場合、ファイルを分割して送ることがあります。# 10MBごとに分割する $ split -b 10M report.tar.gz report_part_ # 受信側で結合する $ cat report_part_* > report.tar.gz
csplitとの違い(パターンで分割する)
split は行数やサイズで機械的に分割しますが、csplit(context split)はパターン(正規表現)でファイルを分割できます。# 「===」という行で区切ってファイルを分割する $ csplit document.txt '/===/' '{*}'
csplit の方が適しています。トラブルシュート・エラー対処
「split: cannot open 'xxx': No such file or directory」
ファイルパスが間違っています。ls でファイルの存在を確認してください。結合後のファイルサイズが元と一致しない
以下を確認してください。・分割ファイルの一部が欠けていないか(
ls -l で全ファイルを確認)・結合時のリダイレクトで上書きしていないか(
> を2回実行するとファイルが上書きされる)・分割ファイルの順番が正しいか(プリフィックスを同じにしていれば、
* で正しく展開される)ディスク容量が不足する場合
分割すると元ファイル+分割ファイルの両方がディスクを消費します。df -h で空き容量を確認してから実行してください。本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| 行数を指定して分割する | split -l 行数 ファイル名 |
| サイズを指定して分割する | split -b 100M ファイル名 |
| プリフィックスを指定して分割する | split -l 行数 ファイル名 プリフィックス |
| サフィックスを数字にする | split -d ファイル名 |
| 拡張子を付けて分割する | split --additional-suffix=.log ファイル名 |
| 分割ファイルを結合する | cat プリフィックス* > 出力ファイル名 |
| パターンで分割する | csplit ファイル名 '/パターン/' '{*}' |
大きなファイルを分割して安全に転送・管理できていますか?
コマンドの使い方を一つひとつ覚えていくのは時間がかかります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:awkコマンドの使い方|パターン検索やフィールド抽出の実践例
- 前のページへ:teeコマンドの使い方|画面表示とファイル保存を同時に行う方法
- この記事の属するカテゴリ:Linuxコマンド・LinuxコマンドP-T・ファイル・ディレクトリ管理コマンドへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます