Zippy 将为此工作。可能有更酷的方法可以做到这一点,但由于基本上没有文档,这就是我想出的在 Rakefile 中使用 Zippy 递归复制目录的方法。这个 Rakefile 在 Rails 环境中使用,所以我将 gem 要求放在我的 Gemfile 中:
#Gemfile
source 'http://rubygems.org'
gem 'rails'
gem 'zippy'
这是 Rakefile
#Rakefile
def add_file( zippyfile, dst_dir, f )
zippyfile["#{dst_dir}/#{f}"] = File.open(f)
end
def add_dir( zippyfile, dst_dir, d )
glob = "#{d}/**/*"
FileList.new( glob ).each { |f|
if (File.file?(f))
add_file zippyfile, dst_dir, f
end
}
end
task :myzip do
Zippy.create 'my.zip' do |z|
add_dir z, 'my', 'app'
add_dir z, 'my', 'config'
#...
add_file z, 'my', 'config.ru'
add_file z, 'my', 'Gemfile'
#...
end
end
现在我可以像这样使用它:
C:\> cd my
C:\my> rake myzip
它将生成my.zip
包含一个名为“my”的内部目录,其中包含所选文件和目录的副本。