本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、ZIPファイルを分割する「zipsplit」コマンドです。
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回はZIPファイルを分割する「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 [オプション] ZIPファイル名
※[ ]は省略可能な引数を示しています
短いオプション | 意味 |
---|---|
-n サイズ | 最大のサイズを指定(デフォルトは3万6000バイト) |
-t | ファイルが幾つに分割されるかを表示する(分割を実行しない) |
-b パス | 分割したZIPファイルの保存先を指定 |
-i | インデックスファイル(zipsplit.idx)を作成する |
-r 空き容量 | 最初のディスクに確保する空き容量を指定(分割したZIPファイルを小容量のリムーバブルディスクに保存するようなときに使用、デフォルトは0) |
-p | 分割したZIPファイルを保存するごとに一時停止する(分割したZIPファイルをリムーバブルディスクに保存する際、ディスクを入れ替えるために使用) |
-s | 分割元のZIPファイル内の順番を保持する(分割後のZIPファイルの個数が多くなることがある) |
-q | 一部のメッセージを表示しない |
「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を分割する)
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」はファイル名だけを表示するオプション。
zipsplitコマンドを「-i」オプション付きで実行すると、インデックスファイルを生成します(画面4)。
インデックスファイルの名前は「zipsplit.idx」で、元のZIPファイルに収納されていたファイルが、分割後はどのZIPファイルに収納されたかをテキスト形式で記録しています。
zipsplit -i -n 最大サイズ ZIPファイル名
(ZIPファイルを分割し、インデックスファイルを作成する)
zipsplit -i -n 5000000 all.zip
(all.zipを最大500万バイトとなるように分割し、インデックスファイルを作成する)
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万バイトで分割した場合について分割後のファイルの個数を表示する)
西村 めぐみ(にしむら めぐみ)
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.