我正在编写一个脚本,它将压缩日志并删除Windows 2008 Server上超过90天的任何内容。我接近做了以下事情:
def remove_old_logs()
d = Time.now.localtime.strftime("%m-%d-%Y")
tfile = "c:/slog/sec/Archive/#{d}-logs.zip"
mtme=File.stat(tfile).mtime.to_s.split[0]
# Compare the old mtime with the old and remove the old.
Dir["c:/slog/sec/Archive/*"].each do |file|
ntme=File.stat(file).mtime.to_s.split[0]
FileUtils.rm( file ) if mtme > ntme #'Time.now.localtime.strftime("%Y-%m-%d")'
end
end
我需要做些什么才能让Ruby与Linux等效:
find . -mtime +90 -type f -exec rm {} \;
答案 0 :(得分:5)
这是一种与OS无关的惯用的Ruby方式,
require 'date'
module Enumerable
def older_than_days(days)
now = Date.today
each do |file|
yield file if (now - File.stat(file).mtime.to_date) > days
end
end
end
# Example emulating `find /path/to... -mtime +90 -type f -exec rm {} \;`
Dir.glob('/path/to/your/files/**/*').older_than_days(90) do |file|
FileUtils.rm(file) if File.file?(file)
end
请注意使用Dir.glob的**
来递归匹配。
(顺便提一下,您可以考虑在shell中find . -mtime +90 -type f -print0 | xargs -0 rm
更高效并避免separator problem)
答案 1 :(得分:1)
你的脚本没有做到你想要的是什么?我看到的唯一重要的缺失是测试它是-type f
命令中的文件或目录find
。
File.file?('path/to/file')
唯一的另一件事是测试它是否超过90天,但你应该能够很容易地解决这个问题。