#!/bin/dash ### FUNCTIONS usage(){ echo "USAGE: qobackup BACKUP_FILENAME BACKUP_DIRECTORY\n" >&2 } die(){ msg=$1 echo "\n$msg\n" >&2 usage exit 1 } timestamp(){ date +_%Y_%m_%d_%H_%M_%S } ### VARIABLE SETTINGS [ $# = 2 ] || die "Must have two arguments." backup_directory="$2" file_to_back_up="$1" file_to_back_up=`basename "$file_to_back_up"` file_to_back_up="${file_to_back_up%.*}" fullpath_to_back_up="$HOME/qownNotes/$file_to_back_up.md" backup_interval_seconds="10" prev_buppathname="/this_should_never_be_a_real_file.fake" ### MAIN ROUTINE CODE echo "WAIT at least $backup_interval_seconds before editing $fullpath_to_back_up!!!" sleep 1 mkdir -p $backup_directory || die "Could not create backup dir $backup_directory." while /bin/true; do # copy ts=`timestamp` buppathname=$backup_directory/${ts}__$file_to_back_up.md cp $fullpath_to_back_up $buppathname # break logic / delete if unchanged status="firstime" [ -f $prev_buppathname ] && status="different" [ "$status" = "different" ] && \ diff $buppathname $prev_buppathname > /dev/null \ && status="same" [ "$status" = "firstime" ] && prev_buppathname=$buppathname [ "$status" = "different" ] && prev_buppathname=$buppathname [ "$status" = "same" ] && rm $buppathname # delay sleep $backup_interval_seconds done