Zipping a directory recursively & skip container directory
Asked Answered
B

1

8

Consider, we have following directory structure:

Location:
/Users/me/Desktop/directory_to_zip/
dir1 dir2 somefile.txt

now, If I use rubyzip to zip the contents of directory_to_zip using the following code:

directory = '/Users/me/Desktop/directory_to_zip/'
zipfile_name = '/Users/me/Desktop/recursive_directory.zip'

Zip::File.open(zipfile_name, Zip::File::CREATE) do |zipfile|
    Dir[File.join(directory, '**', '**')].each do |file|
      zipfile.add(file.sub(directory, ''), file)
    end
end

This will create a zip file named recursive_directory.zip, which will contain a container directory called directory_to_zip & inside directory_to_zip, will I find my files(dir1 dir2 somefile.txt)

HOw do I skip creation of directory_to_zip inside recursive_directory.zip, so that the zip file just contains the contents of directory_to_zip & not the directory itself.

Benzedrine answered 2/2, 2014 at 20:39 Comment(0)
B
8

Okay, I solved this on my own. If you are in same boat, here is here how I did it:

Zip::File.open(zipfile_name, Zip::File::CREATE) do |zipfile|
  Dir.chdir directory
  Dir.glob("**/*").reject {|fn| File.directory?(fn) }.each do |file|
    puts "Adding #{file}"
    zipfile.add(file.sub(directory + '/', ''), file)
  end
end

This works exactly I want. the limitation here here is that it doesn't handle empty directories. Hopefully, it would help someone.

Benzedrine answered 3/2, 2014 at 12:15 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.