如果你不介意使用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文件創建一個新的目錄(減去擴展)。然後,它將提取(使用unzip
)該zip文件到該目錄中,忽略所有路徑(-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
我想只用Ruby庫調用做到這一點。沒有系統調用。 –
我已經更新了我的答案,但沒有使用系統調用。 –