1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Shell、ShellScriptで空のZIPファイルを作成する方法

Posted at

概要

さて、これを読んでいる皆さん

業務の要件でファイルが入っていない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のファイルが作れれば、どんなやり方でも良いんですけどね

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?