Ruby:复制zip文件中文件夹的内容

时间:2013-07-08 12:37:26

标签: ruby zip

有一个zipfile。它可以有10个文件或一个文件夹。该文件夹将包含10个文件。现在,如果zipfile有一个文件夹,那么我必须将所有文件移到上面的一个目录,即

zipfile.zip有文件夹。文件夹有10个文件。通常,如果我解压缩,我得到zipfile /文件夹/ 10files。现在,我必须得到像zipfile / 10files。即。将所有文件移到上面的一个目录中。

怎么做?请帮忙。

1 个答案:

答案 0 :(得分:1)

如果你不介意使用Linux unzip并且真的不担心子目录:

def unzip(file)
  to = File.join(File.dirname(file), File.basename(file, ".*"))
  Dir.mkdir(to) unless File.exists?(to)
  `unzip -j #{file} -d #{to}`
end
# unzip('yourfile.zip')

此方法在与zip文件相同的目录中创建一个新目录,其名称与zipfile相同(减去扩展名)。然后它将zip文件(使用unzip)提取到该目录中,忽略所有路径(-j标志告诉unzip垃圾路径)。

修改

根据您的评论,这是一种无需系统调用的方法:

def unzip(file)
  Zip::ZipFile.open(file) do |zipfile|
    to = File.join(File.dirname(file), File.basename(file, ".*"))
    FileUtils.mkdir(to) unless File.exists? to
    zipfile.each do |f|
      if f.file? # Don't extract directories
        fpath = File.join(to, File.basename(f.name))
        zipfile.extract(f, fpath) unless File.exists?(fpath)
      end
    end
  end
end