有一个zipfile。它可以有10个文件或一个文件夹。该文件夹将包含10个文件。现在,如果zipfile有一个文件夹,那么我必须将所有文件移到上面的一个目录,即
zipfile.zip有文件夹。文件夹有10个文件。通常,如果我解压缩,我得到zipfile /文件夹/ 10files。现在,我必须得到像zipfile / 10files。即。将所有文件移到上面的一个目录中。
怎么做?请帮忙。
答案 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