概要
さて、これを読んでいる皆さん
業務の要件でファイルが入っていないZIPファイルを作成して置いておく必要があったのでは?
そんな皆さんには非常に残念なお知らせですが、Linuxのzipコマンドは空のZIPファイルを作成する為のオプションが用意されていません!
そして、空のZIPファイルは単純な0バイトのファイルという訳ではないので、touchコマンドで空ファイルを作成するように簡単には作れないのです…
そこで空のZIPファイルを作成するやり方を試行錯誤してみます!
やり方を考える
空のディレクトリでファイルだけアーカイブする
残念ながらこの方法ではZIPファイルは作成できません
$ mkdir test
$ zip -j test.zip test
zip error: Nothing to do! (test.zip)
zipコマンドがエラーになってしまい、ZIPファイルは作成されませんでした
ファイルを1つアーカイブして、作成されたZIPからファイルを削除する
この方法では空のZIPファイルは一応作成できます
$ touch test
$ zip test.zip test
adding: test (stored 0%)
$ zip -d test.zip test
deleting: test
zip warning: zip file empty
が、警告が表示されるのと、一時的にもアーカイブするファイルを作成する必要があるので汚いコードだなーって愚痴られるかもしれません
キレイな作り方(答え) 1
echoコマンドを使うやり方
$ echo -ne '\x50\x4b\x05\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' > empty.zip
キレイな作り方(答え) 2
printfコマンドを使うやり方
$ printf "%b" '\x50\x4b\x05\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' > empty.zip
もしかしたら"#%b"は無くても動くかも…
結局のところ
HEX50 4B 05 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
のファイルが作れれば、どんなやり方でも良いんですけどね