blob: c1602d2ecdeb7c39b27eda3aa903f282c5c27312 (
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
#!/bin/bash
# removeOldBackups version #VERSION#
[ -r "#ETCDIR#/backup.conf" ] && \
. "#ETCDIR#/backup.conf"
usage () {
>&2 echo \
'Usage: removeOldBackups [-n]
Remove backups older than one year, keeping only one backup per month.
Options:
#HELPTEXT# #
-n only print what would be removed'
[ -n "$1" ] && exit $1
exit 1
}
no_action=false
if [ $# -eq 1 ]
then
if [ "x$1" == 'x--help' ]
then
usage 0
elif [ "x$1" == 'x--version' ]
then
>&2 echo '#VERSION#'
exit 0
elif [ "x$1" == 'x-n' ]
then
no_action=true
else
usage
fi
elif [ $# -gt 1 ]
then
usage
fi
backups=$(
printf '%s\n' "${backups[@]}" | \
cut -d' ' -f1 | \
while read -r dir; do \
if [ $(ls "$dir" | wc -l) -lt 30 ]; then
continue;
fi
ls -1 "$dir" | \
sed -n '
s,^\([0-9]\{4\}\)_\([0-9]\{2\}\)_\([0-9]\{2\}\)$,'"${dir}"'\0 \3 \2 \1 '"${dir}"',
T
p
'
done
)
{
printf '%s\n' "${backups}" | \
sort -k5,5 -k4,4 -k3,3 -k2,2 -k1,1 | \
uniq -f2
printf '%s\n' "${backups}" | \
sed "$(
for dist in $(seq 0 20 365); do
printf '/ %s \S\+$/p\n' \
"$(date '+%m %Y' -d@$(($(date +%s)-24*60*60*${dist})))"
done
)"
} | \
cut -d' ' -f1 | \
sort | \
uniq -u | \
while read -r dir; do
echo rm -rf --one-file-system "${dir}"
if ! ${no_action}; then
rm -rf --one-file-system "${dir}"
fi
done
|