You could use this template (it is missing your time limit setting) as a baseline.
#!/usr/bin/env bash
# Needs to be run with sudo
if [ "$EUID" -ne 0 ]; then
echo "This script needs to be run with sudo or as a root user"
exit 1
fi
LOCALSNAPSHOTSDIR="/.snapshots"
EXTERNALSNAPSHOTSDIR="/run/media/btrfs_formatted_drive"
LATEST_HOME=(`ls -d $LOCALSNAPSHOTSDIR/home-* | sort | tail -c 9`)
LATEST_HOME_EXTERNAL=(`ls -d $EXTERNALSNAPSHOTSDIR/home-* | sort | tail -c 9`)
TODAY=`date +%Y%m%d`
# make local snapshot
if test -d "$LOCALSNAPSHOTSDIR"; then
echo "Using directory $LOCALSNAPSHOTSDIR for local snapshots."
if [[ $LATEST_HOME -ne $TODAY ]]; then
echo "Today is $TODAY and latest home backup was $LATEST_HOME doing new snapshot"
btrfs subvolume snapshot -r /home $LOCALSNAPSHOTSDIR/home-$TODAY
else
echo "Todays backup already done"
fi
fi
# make an external backup of the snapshot
# destination drive needs to be formatted as BTRFS !
if test -d "$EXTERNALSNAPSHOTSDIR"; then
echo "using directory $EXTERNALSNAPSHOTSDIR for external backup."
if [[ $LATEST_HOME_EXTERNAL -ne $TODAY ]]; then
echo "Today is $TODAY and latest external backup is $LATEST_HOME_EXTERNAL copying data to external drive"
# Update using latest external backup-date as reference to do the differential backup against
btrfs send -p $LOCALSNAPSHOTSDIR/home-$LATEST_HOME_EXTERNAL $LOCALSNAPSHOTSDIR/home-$TODAY | btrfs receive $EXTERNALSNAPSHOTSDIR
else
if test -f "$EXTERNALSNAPSHOTSDIR/home-$TODAY"; then
echo "External backup already up to date"
else
echo "Earlier versions not found, creating the first external backup to $EXTERNALSNAPSHOTSDIR"
btrfs send $LOCALSNAPSHOTSDIR/home-$TODAY | btrfs receive $EXTERNALSNAPSHOTSDIR
fi
fi
else
echo "External drive not found, is it mounted?"
fi