sunetdrive/templates/scriptreceiver/purge_backups.erb.sh

57 lines
1.7 KiB
Bash
Raw Permalink Normal View History

2023-02-13 09:44:56 +00:00
#!/bin/bash
thisyear=$(date +%Y)
lastyear=$(date +%Y -d "last year")
thismonth=$(date +%m)
lastmonth=$(date +%m -d "last month")
backupdir=${1}
if ! [[ -d ${backupdir} ]]; then
echo "Usage: ${0} <backup directory>"
echo "Example: ${0} /opt/mariadb_backup/backups/"
exit 1
fi
cd "${backupdir}"
# We want to keep:
# * one backup per year for a year that is not this
# * one backup per month of this year that is not current month
# * one backup per day of current month
for year in $(ls -d 20*/ | sed 's_/$__'); do
# If it is not this year
if [[ "${year}" != "${thisyear}" ]]; then
# We loop jan - nov
for month in $(seq -w 1 11); do
if [[ -d "${year}/${month}" ]]; then
rm -r "${year}/${month}"
fi
done
# If current month is january and we are dealing with last year we skip it
if ! ([[ "${thismonth}" == "01" ]] && [[ "${year}" == "${lastyear}" ]]); then
for day in $(seq -w 1 30); do
if [[ -d "${year}/12/${day}" ]]; then
rm -r "${year}/12/$day"
fi
done
fi
else
# This means it is this year
# so we loop each month of this year
for month in $(ls -d ${year}/* | sed "s_${year}/__"); do
nexttolastdayoflastmonth=$(date -d "${year}-${month}-01 + 1 month - 2 day" +"%d")
# If it is not the current month, we delete all days except the last
# unless it is january, because then we keep the days around untill february
if [[ "${month}" != "${thismonth}" ]]; then
for day in $(seq -w 1 ${nexttolastdayoflastmonth}); do
if [[ -d "${year}/${month}/${day}" ]]; then
rm -r "${year}/${month}/${day}/"
fi
done
fi
done
fi
done
# Finally we remove any empty directories
find "${backupdir}" -type d -empty -delete