autosave

2008-03-28 Sarnold: I wanted a cron task to make backups of an important file, and be able to simply restore or examine a backup. The following script is just to be invoked every 3 minutes (or more if you want) by calling autosave /path/to/myfile.

It creates a directory _SAVE and subdirectories named after the date (%Y%m%d) which contain indexed backups. Just see the listing:

- myprecious.gnumeric
+ _SAVE
|- myprecious.gnumeric
|-+ 20080320
 |- 1_myprecious.gnumeric
 |- 2_myprecious.gnumeric
|-+ 20080321
 |- 1_myprecious.gnumeric

autosave source code

#!/usr/bin/env tclsh

proc mkdir {dir name} {
        if {![file isdirectory $dir/$name]} {
                file mkdir $dir/$name
        }
        return $dir/$name
}

proc save {file dir} {
        set date [clock format [clock seconds] -format "%Y%m%d"]
        set dir [mkdir $dir $date]
        set index 0
        while {[file exists $dir/[incr index]_$file]} {}
        file copy $file $dir/${index}_$file
}

proc main {file} {
        set dir [file dirname [file normalize $file]]
        cd $dir
        set file [file tail $file]
        set save [mkdir $dir _SAVE]
        if {![file exists $save/$file]} {
                file copy $file $save/$file
                save $file $save
        } elseif {[file mtime $file] > [file mtime $save/$file]} {
                file copy -force $file $save/$file
                save $file $save
        }
}