--- /dev/null
+#!/bin/sh
+#
+
+TARGET=${1-localhost:/tmp/target1}
+HOST="${TARGET%%:*}"
+BASE="${TARGET#*:}"
+if [ "$HOST" = "$TARGET" ] ; then
+ cmd() { $* ; }
+else
+ cmd() { ssh $HOST "$*" ; }
+fi
+
+rm -rf test1 || exit 1
+cmd rm -rf $BASE || exit 1
+
+HERE="$(pwd)"
+mkdir -p test1/A test1/B
+for I in $(seq 1 5) ; do
+ echo something $I > test1/A/afile$I
+ echo more $I > test1/B/bfile$I
+done
+
+cmd mkdir -p $BASE/current
+
+R1="$(./timeliner-local.sh $TARGET test1/A test1/B)"
+
+echo hubba > test1/A/afile1
+echo hubba > test1/A/afile1a
+
+R2="$(./timeliner-local.sh $TARGET test1/A test1/B)"
+
+# target1 now contains one yyyy-mm-dd and 'current'
+DATE=$(date +%Y-%m-%d)
+if [ "$DATE" != "$(cmd ls $BASE | sed "/^current\$/d")" ] ; then
+ echo "** ERROR **"
+ cmd ls $BASE
+fi
+
+content() {
+ cmd find $BASE -type f | xargs ls -i | \
+ sed "s| target1/| |;s|$(pwd)/test1/| |" | \
+ sort -rk3,3 | column -t
+}
+
+cmd mv $BASE/$DATE $BASE/$(date -d "-1 day" +%Y-%m-%d)
+
+R3="$(./timeliner-local.sh $TARGET test1/A test1/B)"
+
+R4="$(content)"
+
+inodes() {
+ cmd find $BASE -name $1 | xargs stat -c %i | \
+ awk '{inodes[$1]+=1}END{for(k in inodes){printf " %s:%s",k,inodes[k]}}'
+}
+
+# Check occurances and inode counts of files
+check() {
+ local N="$(inodes $1)"
+ case "$1" in
+ bfile[1-5]|afile[2-5]*) [ "${N#*:}" = 3 ] && return 0 ;;
+ afile1a) [ "${N#*:}" = 2 ] && return 0 ;;
+ afile1)
+ [ "${N##*:1}" != "$1" ] && [ "${N#*:2}" != "$1" ] && return 0 ;;
+ esac
+ echo "** ERROR $1$N"
+}
+
+for I in $(seq 1 5) ; do
+ check afile$I
+ check bfile$I
+done
+check afile1a
+
+#rm -r test1 target1
#LOGFILE=/var/log/timeliner.log
#LOCAL=/backup
-#BASE=/backup
+#BASE=/backup/$(hostname)
#REMOTE=remote.example.com # needs paswwordless ssh access to root
#DIRS="/root /etc /home /opt /usr"
{
flock -n 1 || exit 0
- timeliner $LOCAL $DIRS && timeliner-backup $REMOTE:$BASE $LOCAL
+ if [ -z "$LOCAL" ] ; then
+ # Remote-only backup scheme
+ timeliner $REMOTE:$BASE $DIRS
+ elif [ -z "$REMOTE" ] ; then
+ # Local-only backup scheme
+ timeliner $LOCAL $DIRS
+ else
+ # Local backup window with remote store
+ timeliner $LOCAL $DIRS && timeliner-backup $REMOTE:$BASE $LOCAL
+ fi
} >> $LOGFILE 2>&1