54 lines
1.1 KiB
Bash
Executable File
54 lines
1.1 KiB
Bash
Executable File
#!/bin/bash -u
|
|
# -u: Treat unset variables as an error when substituting.
|
|
|
|
# Purpose: Purge old snapshots
|
|
# Input: output of lftp "ls" command
|
|
# Output: lftp "rm -r" commands
|
|
|
|
# Number of days of retention before purge
|
|
days_retention=7
|
|
|
|
# But always keep a minimal number of snapshots
|
|
min_keep=5
|
|
|
|
# Every snapshot up to this day will be purged
|
|
last_day_purge=$(date -u +%Y%m%d --date "$days_retention days ago")
|
|
|
|
# Current number of snapshots kept
|
|
n=0
|
|
|
|
# Read each remote file, as output from lftp "ls" command
|
|
while read flags links user group size month day hour f
|
|
do
|
|
# Skip non-snapshots
|
|
if [[ ! $f =~ ^[0-9]*-[0-9]*-[0-9a-z]* ]]
|
|
then
|
|
continue
|
|
fi
|
|
|
|
echo $f
|
|
|
|
# Then reverse sort to have last snapshots first
|
|
done | sort -r | while read f
|
|
do
|
|
# This is one more snapshot
|
|
(( n++ ))
|
|
|
|
# Do not purge until minimal number of snapshots
|
|
if [ $n -le $min_keep ]
|
|
then
|
|
echo "echo '#keep $f'"
|
|
continue
|
|
fi
|
|
|
|
# Purge old snapshots
|
|
day=$(echo $f | cut -d - -f 1)
|
|
if [ $day -le $last_day_purge ]
|
|
then
|
|
echo "echo 'rm -r $f'"
|
|
echo "rm -r $f"
|
|
else
|
|
echo "echo '#keep $f'"
|
|
fi
|
|
done
|