Download:
fmodlog.rb
#!/usr/bin/ruby
#title:File Modification, backup and generation Log
#author:Aaron Radke
#date:2007-10-01
# add include list
#date:2007-09-27
# add skip_list
# add dir_list
# clean up the options file
#date: 2007-09-20
# add file backup functions
#date: 2007-08-23
# rubify for windows
#-------------
require 'find'
require 'fileutils'
#constants
HOME=ENV['userprofile']
LOG="#{HOME}/Library/Logs/fmodlog.log"
DIR_LIST = ["#{HOME}/Desktop","#{HOME}/My Documents","#{HOME}/bin"]
INCLUDE_LIST = ['\.rb$','\.aao$','\.txt','\.doc','\.ppt','\.html','\.vsd','\.xls','\.h','\.c','\.cpp','\.java','\.pde']
SKIP_LIST = ['\bTemp\b','\bLocal Settings','\bLogs\b','\.LOG$',"MS_HTML_Model_1_US_Only","no_sync"]
DO_BACKUP = true
BACKUP_DIR = "H:/backup"
PAUSE_MINUTES=5
def backup(filename)
INCLUDE_LIST.each{|p|
if filename =~ /#{p}/i
copyToDateFolder(filename,BACKUP_DIR)
end
}
end
def copyToDateFolder(file,dir)
now = Time.new()
datestamp = now.strftime("%Y-%m-%d")
date_dir = "#{dir}/#{datestamp}"
if ! File.exists?(date_dir)
Dir.mkdir(date_dir)
end
FileUtils.cp(file,date_dir)
end
puts "fmodlog.rb scanning every #{PAUSE_MINUTES} minutes..."
puts "==========="
pause_seconds = PAUSE_MINUTES*60
begin
#init
now = Time.new()
datestamp = now.strftime("%Y-%m-%d %H:%M:%S")
filecount = 0
puts "------#{datestamp}----"
logfile = File.open(LOG,"a")
Find.find(*DIR_LIST) do |filename|
SKIP_LIST.each{|p|
if filename =~ /#{p}/i
puts "Skip: #{filename}"
Find.prune
next
end
}
if File.file?(filename)
filecount = filecount.next
file = File.stat(filename)
if file.mtime > (now - pause_seconds)
puts "#{file.mtime.strftime("%Y-%m-%d %H:%M:%S")} #{filename}"
logfile.puts "#{datestamp} #{filename}"
backup(filename) if DO_BACKUP
end
# print "#{filecount}, " if filecount % 1000 == 0
end
end
logfile.close
puts "Sleeping #{PAUSE_MINUTES} minutes after checking #{filecount} files ..."
end while sleep(pause_seconds)