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
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
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.
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' }
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' }
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.