summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--Makefile6
-rwxr-xr-xremoveOldBackups.in66
3 files changed, 70 insertions, 3 deletions
diff --git a/.gitignore b/.gitignore
index c636107..e0a3b50 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,7 @@ backup
backupStatistics
fastRepair
lastBackups
+removeOldBackups
man.commons
*.common
*.1
diff --git a/Makefile b/Makefile
index 8e76d11..67ae044 100644
--- a/Makefile
+++ b/Makefile
@@ -27,7 +27,7 @@ MANDIR = /usr/share/man
VERSION = 1.2.2
-all: man.commons backup backup.1 lastBackups lastBackups.1 backupStatistics backupStatistics.1
+all: man.commons backup backup.1 backupStatistics backupStatistics.1 lastBackups lastBackups.1 removeOldBackups removeOldBackups.1
%: %.in
sed " \
@@ -46,8 +46,8 @@ all: man.commons backup backup.1 lastBackups lastBackups.1 backupStatistics back
.PHONY: install dist clean
install: all
- install -D -m0755 -t $(DESTDIR)$(BINDIR) backup backupStatistics lastBackups
- install -D -m0644 -t $(DESTDIR)$(MANDIR)/man1 backup.1 lastBackups.1 backupStatistics.1
+ install -D -m0755 -t $(DESTDIR)$(BINDIR) backup backupStatistics lastBackups removeOldBackups
+ install -D -m0644 -t $(DESTDIR)$(MANDIR)/man1 backup.1 backupStatistics.1 lastBackups.1 removeOldBackups.1
install -D -m0644 -t $(DESTDIR)$(ETCDIR) backup.conf
clean:
diff --git a/removeOldBackups.in b/removeOldBackups.in
new file mode 100755
index 0000000..67d0828
--- /dev/null
+++ b/removeOldBackups.in
@@ -0,0 +1,66 @@
+#!/bin/bash
+
+# removeOldBackups version #VERSION#
+
+[ -r "#ETCDIR#/backup.conf" ] && \
+ . "#ETCDIR#/backup.conf"
+
+usage () {
+ >&2 echo \
+'Usage: removeOldBackups
+Remove old backups keeping only one backup per month for all but the present year.
+
+Options:
+#HELPTEXT# #'
+ [ -n "$1" ] && exit $1
+ exit 1
+}
+
+if [ $# -eq 1 ]
+then
+ if [ "$1" == "--help" ]
+ then
+ usage 0
+ elif [ "$1" == "--version" ]
+ then
+ >&2 echo '#VERSION#'
+ exit 0
+ fi
+ usage
+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 '
+ / '"$(date +%Y)"' \S\+$/p
+ '
+} | \
+ cut -d' ' -f1 | \
+ sort | \
+ uniq -u | \
+ while read -r dir; do
+ echo rm -rf --one-file-system "${dir}"
+ rm -rf --one-file-system "${dir}"
+ done