Rubyでunzip(+文字コード変換)

zipファイルを扱うときにちょっとめんどうなのがファイル名の文字コード。パッチがあったりもするようなのだけど、忘れてアップグレードかけてしまったりしてて。

unzipするRubyスクリプトがあるよというkmutoさんさんのtweetを見て、自作すればいいんだなと。

それで久しぶりにRubyのコードを書いてみた。(なぜだか最近は仕事でばっか書いてます。)

$ ruby1.9.1 -r zipruby -e '
Zip::Archive.open("unzip-rb-test.zip", Zip::CREATE) {|a|
  a.add_buffer("テスト", "a"*123)
  a.add_buffer("ふー/ばー".encode("Shift_JIS"), "b"*321)
}'                                                                            
$ unzip.rb -lv unzip-rb-test.zip
f 2011-06-09 19:46 テスト 123
f 2011-06-09 19:46 ふー/ばー 321
$ unzip.rb unzip-rb-test.zip
extracted files in unzip-rb-test
$ ls -R unzip-rb-test
unzip-rb-test:
ふー  テスト

unzip-rb-test/ふー:
ばー

書いたはいいが適当なzipファイルがなく、ごく普通のzipファイルでは動いてるっぽいけども、変なファイルを作るのもめんどうだなーとまだあまりテストしていない。いきなりファイルが消えたりってことはないと思うけど、試してみようという人は気を付けて。

unzip.rb