Last active
February 3, 2024 13:18
-
-
Save phcorp/659956c9f52af73483dbf0c65b1aa966 to your computer and use it in GitHub Desktop.
Backup files cleaning script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
############################################################################## | |
# This script is meant to be run once a day. | |
# | |
# Backup files name format must be: database-%Y-%m-%dT%H:%M.bz2 | |
# | |
# It deletes backup files that does not match one of these conditions: | |
# - backup every 15 minutes during one week | |
# - backup every day during 3 months | |
# - backup every week during 1 year | |
# | |
############################################################################## | |
# Import parameters | |
current_directory="$(dirname $([ -L $0 ] && readlink -f $0 || echo $0))" | |
. "$current_directory/parameters.sh" | |
set -x | |
# Define variables | |
DELETE_SCRIPT="$current_directory/backup-delete.sh" | |
LAST_WEEK=$(date -d "1 week ago" +%Y%m%d%H%M) | |
LAST_THREE_MONTHS=$(date -d "3 months ago" +%Y%m%d%H%M) | |
LAST_YEAR=$(date -d "1 year ago" +%Y%m%d%H%M) | |
# Do deletion | |
FILES=$(ssh $parameters_backup_user@$parameters_backup_host "ls -1 $parameters_backup_path") | |
echo "$FILES" | while read line; do | |
# extract date from filename | |
# ie: database-2017-10-26T12:20.bz2 → 201710261220 | |
DATE=$(echo $line | sed 's/database-\([0-9]\{4\}\)-\([0-9]\{2\}\)-\([0-9]\{2\}\)T\([0-9]\{2\}\):\([0-9]\{2\}\).bz2/\1\2\3\4\5/g') | |
KEEP_DAY=$(echo $line | sed 's/database-\([0-9]\{4\}\)-\([0-9]\{2\}\)-\([0-9]\{2\}\)T\([0-9]\{2\}\):\([0-9]\{2\}\).bz2/\1\2\30000/g') | |
DAY_OF_WEEK=$(echo $line | sed 's/database-\([0-9]\{4\}\)-\([0-9]\{2\}\)-\([0-9]\{2\}\)T\([0-9]\{2\}\):\([0-9]\{2\}\).bz2/\1-\2-\3 \4:\5/g' | date +%u --date=$1) | |
# delete backups older than one year ago | |
if [[ "$DATE" < "$LAST_YEAR" ]]; then | |
$DELETE_SCRIPT $line | |
fi | |
# delete backups within last year that did not occur a monday | |
if [[ "$DATE" > "$LAST_YEAR" ]] && [[ "$DATE" < "$LAST_THREE_MONTHS" ]] && [[ "$DAY_OF_WEEK" != "1" ]]; then | |
$DELETE_SCRIPT $line | |
fi | |
# delete backups within 3 months that did not occur at midnight | |
if [[ "$DATE" > "$LAST_THREE_MONTHS" ]] && [[ "$DATE" < "$LAST_WEEK" ]] && [[ "$DATE" != "$KEEP_DAY" ]]; then | |
$DELETE_SCRIPT $line | |
fi | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment