扫描文件夹是否包含.zip文件,然后将其删除 - RAILS

时间:2013-08-29 14:14:55

标签: ruby-on-rails ruby ruby-on-rails-3 file-io zip

我有一个功能,其中所有上传的文件首先保存到public / submitted_folder。现在增强它的功能是用户可以查看zip.i中所有上传的文件已经实现了允许用户使用的功能以zip格式下载文件。现在我有一个问题。我需要在下载后删除新生成的zip文件。我想扫描submitted_folder扫描是否存在任何zip文件,然后删除它。我可以这样做吗。如果有更多的子文件夹,例如submitted_folder / folder1 / folder2,我怎样才能扫描所有子文件夹以查找和删除任何zip文件。我引用了api for File in ruby,但很困惑......

2 个答案:

答案 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)

使用文件时,请尝试坚持使用DirFile方法。有很棒的教程可以帮助你入门,我建议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")

抓取这些文件后,您可以提取,删除或执行任何操作:)