blob: 891933a964621e13a2215120270c07634b72c6c0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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
|