4834l1

Listing 1. Simple Ruby File Purge Script

#! /usr/bin/ruby

def delete_older(path, age_in_seconds)

  Dir.foreach(path) { |name|

    next if name == '.' or name == '..'
 
    full_name = File.join(path, name)

    case File.ftype(full_name)

    when "file"
      age = Time.now - File.mtime(full_name)

      if age > age_in_seconds
        puts "Deleting file #{full_name}"
        File.unlink(full_name)
      end

    when "directory"
      delete_older(full_name, age_in_seconds)
      if (Dir.entries(full_name) - ['.', '..']).empty?
        puts "Deleting directory #{full_name}"
        Dir.rmdir(full_name)
      end
    end

  }
end

path = ARGV.shift or raise "Missing path to delete"
age  = ARGV.shift or raise "Missing age in days"

age_in_seconds = age.to_i * 24*60*60


delete_older(path, age_in_seconds) rescue puts "Error: #$!"
