zipsplitコマンド


アニメ『鋼鉄ジーグ』 (1075)

今回は、zipsplitを使うと決めていたので、逆に連想するアニメを探して見てみました。鋼鉄ジーグです。当時は超合金に夢中になってはいましたが、鋼鉄ジーグの一話って見たことがなかったかもしれません。いやあ実に面白いです。特に技術に関して。レースカーの形を見ても、時代は昭和のようなんですが、宙(ひろし)のお父さんだけかなり進んだ技術力を持ってます。秘密基地も一人で作ってしまってるのもすごい。プログラマーなら今一番やりたいAIも、すでにのお父さんは極めています。自分の記憶をコンピュータに保存して、的確に宙に指示を出す、見事です。シュタインズゲートでも出てくるアマデウスの様(あごの割れたオジサン版ではありますが)。すごいお父さんは、さらに無茶苦茶やってます。実の子供をサイボーグに改造済です。
自分が鋼鉄ジーグであることを明かされた宙は、突然基地を飛び出します。そりゃそうですよねえ、いつのまにかサイボーグになってるんだから、怒りますよ誰だって。そして走るバイクの上で言い放つのです!
「父さん、父さんにそんな事情があるとは知らずに逆らってなんてして悪かったよ~(中略)~ 父さんの代わりにヒミカをやっつけてみせる!」
ええええーー! なんて物分かりの良い子。

zip関連コマンド、今回は、zipsplitです。

man zipsplitとやると、なぜかzipnote(1)と表示されていますが、内容はzipsplitのようです。

zipnote(1)                 General Commands Manual                zipnote(1)

NAME
       zipsplit - split a zipfile into smaller zipfiles

SYNOPSIS
       zipsplit  [-t] [-i] [-p] [-s] [-n size] [-r room] [-b path] [-h] [-v]
       [-L] zipfile

ARGUMENTS
       zipfile  Zipfile to split.

使ってみます。適当にzipファイルを作ります。

takk@deb9:~/tmp$ ls
takk@deb9:~/tmp$ echo Hello > a.txt
takk@deb9:~/tmp$ zip a.zip a.txt
  adding: a.txt (stored 0%)
takk@deb9:~/tmp$ ls
a.txt  a.zip
takk@deb9:~/tmp$

引数にファイルを指定するだけです。

takk@deb9:~/tmp$ zipsplit a.zip
1 zip files will be made (100% efficiency)
creating: a1.zip
takk@deb9:~/tmp$ ls
a.txt  a.zip  a1.zip
takk@deb9:~/tmp$ ls -l
合計 12
-rw-r--r-- 1 takk takk   6  8月  2 19:41 a.txt
-rw-r--r-- 1 takk takk 166  8月  2 19:41 a.zip
-rw-r--r-- 1 takk takk 166  8月  2 19:41 a1.zip
takk@deb9:~/tmp$ 

a1.zipというファイルができました。サイズはa.zipと同じみたいですが……。
比べてみます。

takk@deb9:~/tmp$ diff a.zip a1.zip
takk@deb9:~/tmp$ 

一致してます。分割する必要がないくらい小さいので同じデータになったのでしょうか。
次は、大きなファイルで確認してみます。サイズ10MByteでランダムファイルを生成します。

takk@deb9:~/tmp$ dd if=/dev/urandom of=a.bin bs=1M count=10
10+0 レコード入力
10+0 レコード出力
10485760 bytes (10 MB, 10 MiB) copied, 0.0985101 s, 106 MB/s
takk@deb9:~/tmp$ ls -lh a.bin
-rw-r--r-- 1 takk takk 10M  8月  2 20:08 a.bin
takk@deb9:~/tmp$ 

生成したファイルをzip圧縮します。

-rw-r--r-- 1 takk takk 10M  8月  2 20:08 a.bin
takk@deb9:~/tmp$ zip a.zip a.bin
  adding: a.bin (deflated 0%)
takk@deb9:~/tmp$ ls -lh
合計 21M
-rw-r--r-- 1 takk takk 10M  8月  2 20:08 a.bin
-rw-r--r-- 1 takk takk 11M  8月  2 20:09 a.zip
takk@deb9:~/tmp$ 

圧縮して大きくなりましたが、ランダムデータなので仕方ないです。
では、zipsplitにかけてみます。

takk@deb9:~/tmp$ zipsplit a.zip
zipsplit warning: Entry is larger than max split size of: 35978
zipsplit warning: use -n to set split size
zipsplit error: Entry too big to split, read, or write (a.bin)
takk@deb9:~/tmp$

エラーになりました。サイズが大きすぎるようです。
一応ファイル生成されていないか確認。

takk@deb9:~/tmp$ ls -lh
合計 21M
-rw-r--r-- 1 takk takk 10M  8月  2 20:08 a.bin
-rw-r--r-- 1 takk takk 11M  8月  2 20:09 a.zip
takk@deb9:~/tmp$ 

されていません。

次は、サイズ10MByteのファイルを3分割して小さくしてから、zip圧縮して、zipsplitしてみます。
まず3分割。

takk@deb9:~/tmp$ rm a.zip
takk@deb9:~/tmp$ split -n3 a.bin
takk@deb9:~/tmp$ ls -lh
合計 21M
-rw-r--r-- 1 takk takk  10M  8月  2 20:08 a.bin
-rw-r--r-- 1 takk takk 3.4M  8月  2 20:21 xaa
-rw-r--r-- 1 takk takk 3.4M  8月  2 20:21 xab
-rw-r--r-- 1 takk takk 3.4M  8月  2 20:21 xac
takk@deb9:~/tmp$ 

zip圧縮。

takk@deb9:~/tmp$ zip b.zip x*
  adding: xaa (deflated 0%)
  adding: xab (deflated 0%)
  adding: xac (deflated 0%)
takk@deb9:~/tmp$ ls -lh
合計 31M
-rw-r--r-- 1 takk takk  10M  8月  2 20:08 a.bin
-rw-r--r-- 1 takk takk  11M  8月  2 20:23 b.zip
-rw-r--r-- 1 takk takk 3.4M  8月  2 20:21 xaa
-rw-r--r-- 1 takk takk 3.4M  8月  2 20:21 xab
-rw-r--r-- 1 takk takk 3.4M  8月  2 20:21 xac
takk@deb9:~/tmp$ 

zipsplit。

takk@deb9:~/tmp$ zipsplit b.zip
zipsplit warning: Entry is larger than max split size of: 35978
zipsplit warning: use -n to set split size
zipsplit error: Entry too big to split, read, or write (xaa)
takk@deb9:~/tmp$ 

やはりサイズが大きいようです。3.4Mって大きいのでしょうか。
35978より小さくないといけないようです。

では100KByteぐらいのファイルをランダム生成して、3分割したものを使います。

takk@deb9:~/tmp$ rm *
takk@deb9:~/tmp$ dd if=/dev/urandom of=a.bin bs=100K count=1
1+0 レコード入力
1+0 レコード出力
102400 bytes (102 kB, 100 KiB) copied, 0.000725059 s, 141 MB/s
takk@deb9:~/tmp$ split -n3 a.bin
takk@deb9:~/tmp$ ls -lh
合計 208K
-rw-r--r-- 1 takk takk 100K  8月  2 21:27 a.bin
-rw-r--r-- 1 takk takk  34K  8月  2 21:27 xaa
-rw-r--r-- 1 takk takk  34K  8月  2 21:27 xab
-rw-r--r-- 1 takk takk  34K  8月  2 21:27 xac
takk@deb9:~/tmp$ zip b.zip x*
  adding: xaa (deflated 0%)
  adding: xab (deflated 0%)
  adding: xac (deflated 0%)
takk@deb9:~/tmp$

では、zipsplitかけます。

takk@deb9:~/tmp$ zipsplit b.zip
3 zip files will be made (100% efficiency)
creating: b1.zip
creating: b2.zip
creating: b3.zip
takk@deb9:~/tmp$

上手くいったようです。元のファイルがそれぞれ単体の圧縮ファイルになったようですね。
後は、これがunzipできるか確認。

takk@deb9:~/tmp$ rm x*
takk@deb9:~/tmp$ unzip b2.zip
Archive:  b2.zip
  inflating: xab                     
takk@deb9:~/tmp$ 

解凍できました。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA