递归地压缩目录&跳过容器目录

时间:2014-02-02 20:39:33

标签: ruby-on-rails ruby rubyzip

考虑一下,我们有以下目录结构:

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

现在,如果我使用rubyzip使用以下代码压缩directory_to_zip的内容:

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

这将创建一个名为recursive_directory.zip的zip文件,其中包含一个名为directory_to_zip&的容器目录。在directory_to_zip内,我会找到我的文件(dir1 dir2 somefile.txt

请问我是否在directory_to_zip内跳过recursive_directory.zip的创建,以便zip文件只包含directory_to_zip&的内容。不是目录本身。

1 个答案:

答案 0 :(得分:3)

好的,我自己解决了这个问题。如果你在同一条船上,我在这里就是这样做的

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

这完全符合我的要求。这里的限制是它不处理空目录。希望它会帮助某人