#!/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