連載
» 2018年09月27日 05時00分 公開

Linux基本コマンドTips(244):【 zipsplit 】コマンド――ZIPファイルを分割する

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

[西村めぐみ,@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

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

zipsplitコマンドとは?

「zipsplit」は1つのZIPファイルを複数に分割するコマンドです。

 zipsplitは、分割後の個々のファイルそれぞれが単体のZIPファイルとして使用できるように処理します。このため、ZIPファイルが収納しているファイルのサイズによっては、思うように分割できないことがあります。

 例えばメール送信時のサイズ制限に対応するために、「大きなZIPファイルを分割してメールで送信し、受信先で結合してから展開したい」というような場合は「split」コマンド(第162回)を使うと良いでしょう(※1)。

※1 splitコマンドでZIPファイルを分割した場合、ファイルを順番通りに結合しないとZIPファイルとして使用できない。zipsplitコマンドが出力したZIPファイルにはこのような制限がない。



 zipsplitはZIPファイルを作成したり、内部からファイルを取り出したりすることはできません。ZIPファイルの作成にはzipコマンド(連載第34回第36回第37回)を使い、ZIPファイルから元のファイルを取り出す際にはunzipコマンド(第35回第37回第38回)を使用します。



zipsplitコマンドの書式

zipsplit [オプション] ZIPファイル名

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





zipsplitの主なオプション

短いオプション 意味
-n サイズ 最大のサイズを指定(デフォルトは3万6000バイト)
-t ファイルが幾つに分割されるかを表示する(分割を実行しない)
-b パス 分割したZIPファイルの保存先を指定
-i インデックスファイル(zipsplit.idx)を作成する
-r 空き容量 最初のディスクに確保する空き容量を指定(分割したZIPファイルを小容量のリムーバブルディスクに保存するようなときに使用、デフォルトは0)
-p 分割したZIPファイルを保存するごとに一時停止する(分割したZIPファイルをリムーバブルディスクに保存する際、ディスクを入れ替えるために使用)
-s 分割元のZIPファイル内の順番を保持する(分割後のZIPファイルの個数が多くなることがある)
-q 一部のメッセージを表示しない


ZIPファイルを分割する

 「zipsplit ZIPファイル名」でZIPファイルを分割します。分割後のZIPファイルの最大サイズは「-n」オプションで指定します。デフォルトは3万6000バイト(約36KB)です。

 例えば、「zipsplit -n 5000000 all.zip」で、all.zipを最大500万バイト(約5MB)となるように分割します(画面1)。分割後のファイル名は「all1.zip」「all2.zip」……のように元ファイル名+連番となります。

 zipsplitコマンドで分割したZIPファイルは、それぞれ完全なZIPファイルとして利用できます。

コマンド実行例

zipsplit -n 最大サイズ ZIPファイル名(出力ファイルサイズの上限を指定してZIPファイルを分割する)

zipsplit -n 5000000 all.zip

(出力ファイルサイズの上限を500万バイトとしてall.zipを分割する)


画面1 画面1 ZIPファイルを最大約5MBになるように分割したところ 3つのZIPファイルに分かれた


分割には制限がある

 zipsplitコマンドは、内部のファイルのうち、どれとどれを組み合わせて出力するかを調整してZIPファイルを分割します。

 例えば、A、B、C、D、Eという5つのファイルを圧縮した約15MBのZIPファイルがあったとします。圧縮後のサイズはAが約1MB、Bが約2MB、Cが約3MB、Dが約4MB、Eが約5MBだとしましょう。

 これを「最大で約5MBとなるように分割」指定した場合、AとDで1つのZIPファイル、BとCで1つのZIPファイル、Eで1つのZIPファイル、となります(画面2)。

 この場合、「最大で4MBとなるように分割」はできません。5MBのファイルEがあるためです(画面3、※2)。

※2 zipsplitコマンドがヘッダ部分などを新たに作成するため、ZIPファイル内部の最大のファイルよりもわずかに大きなファイルができ上がる。このため、ギリギリのサイズを指定すると分割に失敗することがある。画面3中のzipinfoはZIPファイルの情報を表示するコマンド(第241回)。「-l」は各ファイルの圧縮後のファイルサイズを表示するオプション、「-1」はファイル名だけを表示するオプション。



画面2 画面2 分割後のサイズを500万バイト(約5MB)と指定し、どのようにファイルが分割されるか調べたところ all2.zipには約1MBのfileAと約4MBのfileDが含まれていた
画面3 画面3 分割後の最大ファイルサイズを約4MBと指定したところ fileEのサイズが約5MBあるため、分割に失敗した


インデックスファイルを作成する

 zipsplitコマンドを「-i」オプション付きで実行すると、インデックスファイルを生成します(画面4)。

 インデックスファイルの名前は「zipsplit.idx」で、元のZIPファイルに収納されていたファイルが、分割後はどのZIPファイルに収納されたかをテキスト形式で記録しています。

コマンド実行例

zipsplit -i -n 最大サイズ ZIPファイル名

(ZIPファイルを分割し、インデックスファイルを作成する)

zipsplit -i -n 5000000 all.zip

(all.zipを最大500万バイトとなるように分割し、インデックスファイルを作成する)


画面4 画面4 インデックスファイルを作成してZIPファイルを分割したところ zipsplit.idxによれば、fileAはall2.zipに、fileBはall3.zipに振り分けられたことが分かる


分割後にファイルの順番を保持する

 zipsplitは、分割後のファイル数がなるべく少なくなるようにファイルの組み合わせを調整します。このため、出力後のZIPファイルにどのファイルが格納されるのか、予測が難しくなります。分割後も元のファイル順を保持したい場合は「-s」オプションを使用します(画面5)。

 「-s」オプションを使うと、分割後のファイル数が多くなることがあります。分割後のファイル数を事前に確認したい場合は「-t」オプションを使います。

コマンド実行例

zipsplit -s -n 最大サイズ ZIPファイル名

(元のファイル順を保持してZIPファイルを分割する)

zipsplit -t -s -n 最大サイズ ZIPファイル名

(元のファイル順を保持した場合の分割後のファイル数を、分割を実行せずに表示する)

zipsplit -t -s -n 5000000 all.zip

(元のファイル順を保持しながらall.zipを最大500万バイトで分割した場合について分割後のファイルの個数を表示する)


画面5 画面5 内部のファイルの順番を維持しながらZIPファイルを分割したところ 画面4と比較して、分割後のファイルが1つ多くなった


筆者紹介

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

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


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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