使用Ruby归档文件的正确方法是什么?

时间:2013-11-16 00:40:00

标签: ruby directory compression zip archive

我希望通过Ruby制作我选择(或允许用户选择)的任何目录的压缩* .zip文件,我不太清楚如何做到这一点。我知道如何创建* .zip文件,只是不将实际文件压缩到存档中。我做了一些谷歌搜索并发现了RubyZip和其他一些资源,但RubyZip目前处于一个失败的构建状态,我很好奇它是如何完成的,所以我不必完全依赖外部资源。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

“构建状态失败”是什么意思?最终,rubyzip依赖于核心Ruby中的zlib,文件实用程序和流标准库,因此rubyzip本身就是纯Ruby,无需构建。如果有错误,您可能想要粘贴它。压缩文件和目录是not straightforward,因此IMO实际上是外部库的理想选择。

我似乎没有问题,所以我对你的实际错误感兴趣。

$ gem install rubyzip
Fetching: rubyzip-1.1.0.gem (100%) yadayada

使用source homepage上稍微修改过的示例版本,您可以轻松压缩在命令行传递的目录(递归):

require 'pathname'
require 'zip'

directory = Pathname.new(ARGV.first)
zipfile_name = "#{directory}.zip"

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

IMO,在这种情况下的答案是使用流行的图书馆并按照文档。 Rubyzip最近有一些变化,所以你可以找到的一些建议已经过时,或者可能有些问题需要进行一些调整。但是这个功能结果证明是一个重新发明的轮子。