This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
| Automating Backups | ||
|---|---|---|
| Code | Expected | Actual |
require 'fileutils'
def backup(from_dir, to_dir, time_format="-%Y%m%d")
from_path, from_name = File.split(from_dir)
now = Time.now.strftime(time_format)
Dir.mkdir(to_dir) unless File.exists? to_dir
unless File.directory? to_dir
raise ArgumentError, "Not a directory: #{to_dir}"
end
to = File.versioned_filename(File.join(to_dir, from_name + now))
FileUtils.cp_r(from_dir, to, :preserve=>true)
return to
end |
This method copied from "Backing Up to Versioned Filenames" |
|
class File
def File.versioned_filename(base, first_suffix=".0")
suffix = nil
filename = base
while File.exists?(filename)
suffix = (suffix ? suffix.succ : first_suffix)
filename = base + suffix
end
return filename
end
end |
Create a dummy directory |
|
Dir.mkdir('recipes') |
And back it up. |
|
backup('recipes', '/tmp/backup') |
"/tmp/backup/recipes-20061031" | "/tmp/backup/recipes-20060413" |
backup('recipes', '/tmp/backup') |
"/tmp/backup/recipes-20061031.0" | "/tmp/backup/recipes-20060413.0" |
backup('recipes', '/tmp/backup', '-%Y%m%d-%H.%M.%S') |
"/tmp/backup/recipes-20061031-20.48.56" | "/tmp/backup/recipes-20060413-13.39.45" |