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