在Rails中压缩目录

时间:2012-07-16 17:54:02

标签: ruby-on-rails ruby zip rubyzip

我如何在rails上的ruby中压缩目录?我试过rubyzip没有成功。我不需要单独压缩dir的内容只是压缩dir本身。

2 个答案:

答案 0 :(得分:12)

您必须遍历目录中的项目才能在压缩文件中添加条目。

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/

使用命令

执行此操作的另一种方法
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

<强>更新

感谢Mahmoud Khaled的编辑/更新

新版本使用Zip::File.open代替Zip::ZipFile.open

答案 1 :(得分:0)

您可以使用tar tar -cvf your_dir.tar your_dir/

创建目录存档

然后使用 -

压缩rails中的tar
def gzip_my_dir_tar(your_dir_tar_file)
  content = File.read(your_dir_tar_file)
  ActiveSupport::Gzip.compress(content)
end

已在Rails 3: How do I generate a compressed file on request

处回答