zipsplitコマンド

https://www.youtube.com/watch?v=Q2mQBMSeZfQ
アニメ『鋼鉄ジーグ』 (1975)

今回は、zipsplitを使うと決めていたので、逆に連想するアニメを探して見てみました。古いアニメの1話ってほとんど見たことがありません。見てたかもしれませんが思い出せません。鋼鉄ジーグもそうです。今見るとどの名作も新鮮に感じます。

感想ですが、このアニメ実に面白いです。特に技術に関して。
レースカーの形を見ても、時代は昭和のようなんですが、宙(ひろし)のお父さんだけかなり進んだ技術力を持ってます。どうやって作ったんだか、秘密基地を一人で建造してしまってるんだからすごい。

現代のプログラマーなら今一番やりたい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$ 

解凍できました。

コメント

タイトルとURLをコピーしました