Zipping a directory in Rails [closed]

2019-06-19 08:28发布

How do i go about zipping a directory in ruby on rails? I've tried rubyzip without success. I don't need to zip the contents of the dir individually just zip the dir itself.

2条回答
该账号已被封号
2楼-- · 2019-06-19 09:06

You can create an archive of the directory using tar tar -cvf your_dir.tar your_dir/

and then compress the tar in rails using -

def gzip_my_dir_tar(your_dir_tar_file)
  content = File.read(your_dir_tar_file)
  ActiveSupport::Gzip.compress(content)
end

Its already answered at Rails 3: How do I generate a compressed file on request

查看更多
爱情/是我丢掉的垃圾
3楼-- · 2019-06-19 09:25

You are going to have to loop through the items in the directory to add an entry in the compressed file.

def compress(path)
  gem 'rubyzip'
  require 'zip/zip'
  require 'zip/zipfilesystem'

  path.sub!(%r[/$],'')
  archive = File.join(path,File.basename(path))+'.zip'
  FileUtils.rm archive, :force=>true

  Zip::ZipFile.open(archive, 'w') do |zipfile|
    Dir["#{path}/**/**"].reject{|f|f==archive}.each do |file|
      zipfile.add(file.sub(path+'/',''),file)
    end
  end
end

http://grosser.it/2009/02/04/compressing-a-folder-to-a-zip-archive-with-ruby/

Another way to do it with a command

Dir["*"].each do |file|
  if File.directory?(file)
    #TODO add OS specific,
    #  7z or tar .
    `zip -r "#{file}.zip" "#{file}"`
  end
end

http://ruby-indah-elegan.blogspot.com/2008/12/zipping-folders-in-folder-ruby-script.html

Update

Thank you Mahmoud Khaled for the edit/update

for the new version use Zip::File.open instead of Zip::ZipFile.open

查看更多
登录 后发表回答