Posted at

rubyzipでZip内のファイル名を変更する

More than 3 years have passed since last update.

例えばzipファイル内のfoo.txtをbar.txtにリネームするには次のようにする。

require "zip"

Zip::File.open(zip_path) do |zip_file|
entry = zip_file.find_entry("foo.txt") # Zip::Entry
zip_file.rename(entry, "bar.txt")
end

ループで回して一括で連番にしたいときには次のようにする。

require "zip"

Zip::File.open(zip_path) do |zip_file|
# Zip::File#entriesはEnumerableなZip::EntrySetを返す
zip_file.entries.sort_by(&:name).each.with_index(1) do |entry, n|
new_name = "#{n}.txt"
zip_file.rename(entry, new_name)
end
end

rubyzip 1.1.7で確認した。1.xと0.xとでAPIが変わっているので要注意。