1

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

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

这个怎么做?请帮忙。

4

1 回答 1

1

如果您不介意使用 Linuxunzip并且真的不担心子目录:

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 文件相同的目录中创建一个与 zip 文件同名(减去扩展名)的新目录。然后它将 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
于 2013-07-09T15:40:26.180 回答