我一直在尝试编写一个Ruby脚本来查找和删除文件夹中最旧的AVI文件。我找到了一个非常接近的script in Python,我自己在Ruby解决方案上有了一个良好的开端:
require 'fileutils'
stat = Sys::Filesystem.stat("/")
mb_available = stat.block_size * stat.blocks_available / 1024 / 1024
#if there is less than 130MB free
if mb_available < 130000
require 'find'
movie_file_paths = []
#grab all the files in the folder
Find.find('/Users/jody/Movies') do |path|
movie_file_paths << path if /.*\.avi/.match(path) != nil
end
end
但是,我和其他人一起度过了艰难的时光。任何帮助将不胜感激!
编辑:
这是解决方案:
movie_file_paths = []
Dir.glob("/Users/jody/Movies/**/*.avi").each { |file| movie_file_paths << file if File.file? file }
movie_file_paths.sort_by {|f| File.mtime(f)}
deleteme = movie_file_paths.first
答案 0 :(得分:3)
我看到你已经选择了一个答案,但它可以是一个单行:
File.delete(Dir.glob("/Users/jody/Movies/**/*.avi").sort_by{|f| File.mtime(f)}.first)
更新:几年后我偶然发现了这一点,并且自己想,&#34;我可以做得更短!&#34;
File.delete(Dir["/Users/jody/Movies/**/*.avi"]).min_by{|f| File.mtime(f)})
答案 1 :(得分:2)
File
包含您想要的方法,特别是ctime
用于“最后更改”次数(NTFS上的创建时间),mtime
如果您想要“上次修改”次数,或{atime
1}}表示“上次访问”次数。将其与Dir::glob
相结合,您可以轻松获取按日期时间排序的文件列表:
videos = Dir['/Users/jody/Movies/*.avi'].sort_by(&:ctime)
删除最后一个非常简单:
File.delete videos.last
答案 2 :(得分:1)
使用File.mtime(filename)
获取文件的上次修改时间。
movie_file_path.sort_by {|f| File.mtime(f)}
将按mtime
返回已排序的数组。然后,您可以使用File.delete(filename)
删除该文件。
修改:上次访问时间atime
可能是比mtime
更好的选择。