summaryrefslogtreecommitdiff
path: root/scriptlets/backup_rotation.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scriptlets/backup_rotation.sh')
-rwxr-xr-xscriptlets/backup_rotation.sh31
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