【 split 】コマンド――ファイルを分割するLinux基本コマンドTips(162)

本連載はLinuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回はファイルを分割する「split」コマンドです。

» 2017年11月24日 05時00分 公開
[西村めぐみ@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載はLinuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回はファイルを複数に分割する「split」コマンドです。

splitコマンドとは?

 「split」コマンドは、ファイルを指定したサイズや個数に分割します。ファイルが大きすぎてコピーやダウンロードに失敗するような時や、小容量のメディアに保存する場合、添付ファイルの容量に制限があるメールサービスなどで使用します。

 分割するファイルの種類には特に制限がなく、テキストファイルを分割することもできます。

splitコマンドの書式

split [オプション] ファイル [分割ファイル名の接頭辞]

※[ ]は省略可能な引数を示しています。




splitの主なオプション

短いオプション 長いオプション 意味
-b サイズ --bytes=サイズ 分割ファイルのサイズを指定する ※1
-l 行数 --lines=行数 分割ファイルの行数を指定する
-C サイズ --line-bytes=サイズ 分割ファイルに含める行の最大サイズを指定する ※1
-a 長さ --suffix-length=長さ 接尾辞の長さ(デフォルトは2文字)
-d --numeric-suffixes 接尾辞を英字ではなく数字にする(00から開始、「-d 開始番号」で変更可能)
--additional-suffix=文字列 ファイル名の末尾に文字列を追加する
-n 個数 --number=個数 指定した個数のファイルに分割する。例えば「-n 5」でファイルを5分割する。「-n 2/5」とした場合、5分割して2つ目のファイルを標準出力に出力する ※2。
-e --elide-empty-files -nを使用した際に空のファイルを作成しない(-nでファイルサイズに対して比較的大きな数を指定すると空のファイルができることがある)
-u --unbuffered -nオプション使用時にバッファリングしないで入力を出力にコピーする
--filter=コマンド コマンドに対してファイル名を出力する ※3
--verbose 出力ファイルを開く前に診断メッセージを表示する

※1 「サイズ」の指定方法は2種類ある。数値を1024の累乗で指定する場合は、K、M、G、T、P、E、Z、Yを使う(キロ、メガ、ギガ、テラ、ペタ、エクサ、ゼタ、ヨタを意味する)。1000の累乗で指定するときはKB、MB……と記述する。単位を指定しなかった場合はKBやMB同様、バイト数を指定したことになる。
※2 「-n l/5」「-n l/2/5」のように小文字のエルを付けると、1行内では分割せず、ファイルを指定した個数に分割する。バイナリファイルでもある程度有効だが、対象がテキストファイルの場合に意味を持つ。
※3 分割後のファイルをディスクに書き込まず、それぞれのファイルに対して、指定したコマンドによる処理を加えたい場合に役立つ。例えばテキストファイルtextの各行の間にさらに改行を入れて表示したい場合は、「cat test | split -l 1 --filter='cat;echo -e \n'」とする。





ファイルサイズを指定して分割する

 「split -b 1GB ファイル名」とすると、指定したファイルをちょうど10億バイトごとに分割します(ただし最後に分割されたファイルのサイズは10億バイト以下になる)。「split -b 1G ファイル名」では、10億7374万1824バイト(1024の3乗)ごとに分割します。

 splitコマンドが分割して出力したファイルには、何らかの名前が必要です。出力ファイルの名前は「接頭辞+接尾辞」という形式になります。

 コマンド実行時に何も指定しなかった場合、出力ファイル名は自動で決まり、「x」(接頭辞)とアルファベット2文字(接尾辞)を組み合わせた「xaa、xab、xac……、xaz、xba……」となります。「x」の部分に別の接頭辞を指定する場合は、splitコマンドで分割するファイル名の後に、指定します。「split -b 1GB ファイル名 接頭辞」ですね。

 xや接頭辞の後に、接尾辞としてaa、ab、ac……ではなく、数字を続けたい場合は、「-d」オプションを指定します。

 例えば「InstallImage.iso」を分割して「InstallImage-00、InstallImage-01……」としたい場合は「split -b 1G -d InstallImage.iso InstallImage-」とします(画面1)。ファイル名末尾(接尾辞)のアルファベットや数字の桁数は2です。桁数を変更したい場合は「-a 3」(3桁を指定)のように指定します。

コマンド実行例

split -b サイズ -d ファイル名 分割ファイル名の接頭辞

split -b 1G -d InstallImage.iso InstallImage-

(InstallImage.isoを10億7374万1824バイトごと(-b 1G)に分割、分割ファイル名は「InstallImage-」と数字の組み合わせ(-d)とする)(画面1


画面1 画面1 接頭辞と接尾辞を指定してファイルを1GBごとに分割したところ


ファイルの個数を指定して分割する

 splitコマンドは出力ファイルのサイズ以外に、幾つのファイルに分割するかを指定できます(画面2)。ファイル数(個数)を指定するには「-n 個数」とします。

コマンド実行例

split -n 個数 -d ファイル名 分割ファイル名の接頭辞

split -n 3 -d InstallImage.iso InstallImage-

(InstallImage.isoを3つに分割(-n 3)、分割ファイル名は「InstallImage-」と数字の組み合わせ(-d)とする)(画面2


画面2 画面2 ファイルを3つに分割したところ


分割したファイルを1つのファイルへ結合する

 splitで出力したファイルには、余分なデータが付いていません。前後に改行コードなどは入っていません。従って、順番さえ間違えなければ、catコマンド(連載第1回)を使って連結できます。

 画面3では、画面2で分割したファイルを「InstallImage.iso2」というファイルに連結しています。

 元ファイルとファイルを結合して作り出したファイルの内容が、一致しているかどうか確認する方法は幾つかあります。cmpコマンド(第106回)で1バイトずつ比較する他、sha256sumコマンド(第160回)やmd5sumコマンド(第161回)でハッシュ値を比較できます。

画面3 画面3 分割したファイルを結合し、元ファイルとハッシュ値を比較したところ


筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。