Med lite tid över och inget annat att göra så fixade jag min backuplösning till att nästan göra det som du vill, den gör #1 & #3 (även om jag inte gör det) och att implementera #2 är inte svårt alls har en version som gör en komplett kopia varje vecka men använder det inte..
(entity@ran ~): cat /usr/scripts/backup-trigger
#!/bin/sh
set PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin; export PATH
timestamp=".backup-stamp"
backupstatus=".backup-status"
homedir="/Users/entity"
backupdir="/Volumes/aegir/backup"
snapdate="$backupdir/.snap-date"
snapdir="current-snapshot"
archivedir=`date "+archive-%Y-%m-%d"`
echo "idle" > $homedir/$backupstatus
wait4path $backupdir
sleep 10
if [ ! -d "$backupdir" ]; then
echo "error" > $homedir/$backupstatus
sleep 1
exit 0
fi
# update the message in the iHook window
echo "running" > $homedir/$backupstatus
sleep 5
rsync --delete-after --stats -aE "${homedir}/" "$backupdir/$snapdir" >/dev/null 2>&1
date "+%y%m%d" > $homedir/timestamp
echo "done" > $homedir/$backupstatus
Denna läggs in som ett jobb i launchd (använd lingon) som startar som ett login item, den lägger sig då och idlar tills dess att disken sätts i, då tar den en backup. nästa gång som man loggar in så startas den i vänteläge med.
Den har en liten funktion som gör att jag kan se med geektools om den har tagit en backup eller inte genom att ha ett simpelt status script
(entity@ran ~): cat /usr/scripts/backup-status
#!/bin/sh
set PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin; export PATH
timestamp=".backup-stamp"
backupstatus=".backup-status"
homedir="/Users/entity"
backupdir="/Volumes/aegir/backup"
snapdate="$backupdir/.snap-date"
snapdir="current-snapshot"
archivedir=`date "+archive-%Y-%m-%d"`
STATUS="$(cat $homedir/$backupstatus)"
TIMES="$(cat $homedir/$timestamp)"
echo -n "bu: $STATUS ($TIMES)"
ser ut så här nere i hörnet på mitt skrivbord http://tinyurl.com/ytsdnj