我有一个功能,其中所有上传的文件首先保存到public / submitted_folder。现在增强它的功能是用户可以查看zip.i中所有上传的文件已经实现了允许用户使用的功能以zip格式下载文件。现在我有一个问题。我需要在下载后删除新生成的zip文件。我想扫描submitted_folder扫描是否存在任何zip文件,然后删除它。我可以这样做吗。如果有更多的子文件夹,例如submitted_folder / folder1 / folder2,我怎样才能扫描所有子文件夹以查找和删除任何zip文件。我引用了api for File in ruby,但很困惑......
答案 0 :(得分:1)
假设你使用的是linux,你可以从ruby执行bash命令。
下面是linux命令,删除路径“path”(包括子目录)下扩展名为.zip的所有文件
find path -type f -name *.zip -delete
使用
从app执行system("find path -type f -name *.zip -delete")
或
`find path -type f -name *.zip -delete`
答案 1 :(得分:0)
使用文件时,请尝试坚持使用Dir
和File
方法。有很棒的教程可以帮助你入门,我建议this screencast。
当你在正确的目录中时,抓取和删除zip文件很容易。
抓取所有zip文件
files = Dir.glob("*.zip")
删除某个文件:
File.delete("#{file}")
提取文件有点棘手,我自己创建了一个文件夹,将所有提取的文件放入,然后从那里开始工作。您还需要rubyzip
gem来更好地处理ZIP文件。
require 'zip/zip'
# creates a directory with a name
Dir.mkdir("#{Dir.pwd}/#{name}") unless File.exists?("#{Dir.pwd}/#{name}")
# opens up the zip file
zipfile = Zip::ZipFile::open(Dir.pwd + "/" + zip_path)
# changes the working directory to the newly created folder
Dir.chdir "#{name}"
# unzips the zip and returns the xml files in it
files = []
zipfile.each do |file|
zipfile.extract(file, "#{Dir.pwd}/#{file.name}") unless File.exists?("#{Dir.pwd}/#{file.name}")
end
事实证明,有一个简单的功能来搜索当前目录和所有子目录。 **
是关键
all_zip_files = Dir.glob("**/*.zip")
抓取这些文件后,您可以提取,删除或执行任何操作:)