Forum: Ruby on Rails Renaming a file inside a zip

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
A1247f73598357f06388e863c41aa624?d=identicon&s=25 Elias Orozco (elioncho)
on 2009-04-27 17:13
(Received via mailing list)
Hello,

Can anyone help me or give me any clue on how to rename a file (or
folder) inside a zip file without having to unzip it first. I'm trying
to do this using the rubyzip gem without luck.

Thanks,

ElĂ­as
84fbb9c2a7b05c3ddf39904514585a90?d=identicon&s=25 Franco Catena (Guest)
on 2009-04-27 18:40
(Received via mailing list)
You must require 'zip/zipfilesystem' and

Zip::ZipFile.open('my.zip') do |zipfile|
  zipfile.file.rename 'orignal_name.txt', 'new_name.txt'
end

And this is it, for more information see the Zip::ZipFileSystem class
documentation.

Regards.

Franco Catena.
A1247f73598357f06388e863c41aa624?d=identicon&s=25 Elias Orozco (elioncho)
on 2009-04-27 18:59
(Received via mailing list)
Hi Franco,

Thanks for your reply, but still it ain't working for. I need to
rename a folder not a file. It works fine for file but not for
folders. I tried this and it correctly renamed the file build.yml to
builder.yml, BUT the folder wasn't rename, instead it created a new
folder in the same level of the one I wanted to rename. Any clues?

    Zip::ZipFile.open('/home/elioncho/Desktop/MyApp.zip'){|zf|
      parent_folder = zf.get_entry('Test/')
      file = zf.get_entry('Prueba/build.yml')
      parent_folder.name = 'Prueba/testing/'
      file.name = 'Prueba/builder.yml'
    }
A1247f73598357f06388e863c41aa624?d=identicon&s=25 Elias Orozco (elioncho)
on 2009-04-27 19:01
(Received via mailing list)
I copied a wrong code, here it is. As I say before it only works for
renaming the file not the folder.

    Zip::ZipFile.open('/home/elioncho/Desktop/MyApp.zip'){|zf|
      parent_folder = zf.get_entry('Test/')
      file = zf.get_entry('Test/build.yml')
      parent_folder.name = 'Testing/'
      file.name = 'Test/builder.yml'
    }
84fbb9c2a7b05c3ddf39904514585a90?d=identicon&s=25 Franco Catena (Guest)
on 2009-04-27 19:46
(Received via mailing list)
There is no method to directly rename a directory, you must use the
rename in every file between the directory like this:

Zip::ZipFile.open('my.zip') do |zipfile|
  zipfile.file.rename 'original_dir/orignal_name.txt', 'new_dir/
original_name.txt'
end

And after that you can remove the original directory.

Regards.

Franco Catena.
This topic is locked and can not be replied to.