kikukawa's diary

都内で活動するシステムエンジニアが書いてます。 興味を持った技術やハマったポイント、自分用メモをつけてます。 最近はweb中心

rubyでzipファイルの全てを解凍せず、先頭からいくつかのファイルを抽出する

rubyでzipを扱うには、いくつかgemがあるようですが、
rubyzipを使用しました。

Gemfileに以下のように書いて、bundle installすれば使えました。

gem 'rubyzip'


今回用途として、zip内先頭の数ファイルと最後から数ファイルを
取り出して中身を判別したいというものだったので、
下記のようなやっつけコードを書きました。
全部を解凍せずに、ほしい物だけ取り出せるので便利です。
同じようなもので、rarを扱えるgemが欲しかったのですが、
まだ、gemにはそこまでのものがないようです。

require 'zip'
Zip::File.open('foo.zip') do |zip_file|
  entry_firsts = zip_file.glob('*.*').first(3)
  entry_firsts.each do |entry_first|
    entry_first.extract(Dir::pwd + "/tmp/" + entry_first.name){ true }
  end
  entry_lasts = zip_file.glob('*.*').last(3)
  entry_lasts.each do |entry_last|
    entry_last.extract(Dir::pwd + "/tmp/" + entry_last.name){ true }
  end
end