diff options
Diffstat (limited to 'scriptlets/backup_rotation.sh')
-rwxr-xr-x | scriptlets/backup_rotation.sh | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/scriptlets/backup_rotation.sh b/scriptlets/backup_rotation.sh new file mode 100755 index 0000000..891933a --- /dev/null +++ b/scriptlets/backup_rotation.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +BACKUP_ROOT="/home/jay/Downloads/Snapshots" +BACKUP_REGEX='.*[0-9]+-[0-9]+-[0-9]+_[0-9]+:[0-9]+:[0-9]+' +RETAIN_NUM=30 + +[[ ! -d "$BACKUP_ROOT" ]] && echo "[$(date '+%Y-%m-%d_%H:%M:%S')] ERROR. Root backup directory '$BACKUP_ROOT' not found. Exiting..." && exit -1 + +BACKUP_SITES=() +while IFS= read -r -d $'\0'; do + BACKUP_SITES+=("$REPLY") +done < <(find "$BACKUP_ROOT" -maxdepth 1 -mindepth 1 -type d -print0) + +[[ ${#BACKUP_SITES[@]} -eq 0 ]] && echo "[$(date '+%Y-%m-%d_%H:%M:%S')] Error. No backup sites found in root directory '$BACKUP_ROOT'. Exiting..." && exit -1 + +for SITE in ${BACKUP_SITES[@]}; do + + TOTAL_NUM=$(ls -1 "$SITE" | grep -cE "$BACKUP_REGEX") + DELETE_NUM=$((TOTAL_NUM - RETAIN_NUM)) + + if [ $DELETE_NUM -gt 0 ]; then + + old_backups=$(ls -1 "$SITE" | grep -E "$BACKUP_REGEX" | sort | head -n $DELETE_NUM) + for old_backup in ${old_backups[@]}; do + rm -rf "$SITE/$old_backup" + echo "[$(date '+%Y-%m-%d_%H:%M:%S')] Removed old backup: $SITE/$old_backup" + done + else + echo "[$(date '+%Y-%m-%d_%H:%M:%S')] Amount of stored backups in '$SITE' does not exceed retention policy [$RETAIN_NUM]. No old backups removed" + fi +done |