aboutsummaryrefslogtreecommitdiff
path: root/backup-cleanup
diff options
context:
space:
mode:
Diffstat (limited to 'backup-cleanup')
-rwxr-xr-xbackup-cleanup67
1 files changed, 67 insertions, 0 deletions
diff --git a/backup-cleanup b/backup-cleanup
new file mode 100755
index 0000000..31483c9
--- /dev/null
+++ b/backup-cleanup
@@ -0,0 +1,67 @@
+#! /bin/sh
+
+dir=
+suffix=
+retainweeks=3
+dry_run=
+verbose=:
+
+help() {
+ cat <<EOF
+usage: $0 [OPTIONS] DIR
+cleans up old backup files in DIR
+
+OPTIONS are:
+ -s, --suffix SUF consider only file names ending in SUF
+ -r, --retain N retain N last weeks of backups (default $retainweeks)
+ -v, --verbose verbosely list what is being done
+ -n, --dry-run do nothing, print what would have been done
+ -h, --help print this help list
+
+EOF
+ exit 0
+}
+
+while [ $# -ne 0 ]
+do
+ case $1 in
+ -s|--suffix) shift; suffix=$1;;
+ -r|--retain) shift; retainweeks=$1;;
+ -v|--verbose) verbose=echo;;
+ -n|--dry-run) dry_run=echo; verbose=echo;;
+ -h|--help) help;;
+ --) shift; break;;
+ -*) echo >&2 "$0: unrecognized option $1"
+ exit 1;;
+ *) break
+ esac
+ shift
+done
+
+case $# in
+0) echo >&2 "$0: not enough arguments"
+ exit 1;;
+1) dir=$1;;
+*) echo >&2 "$0: too many arguments"
+ exit 1;;
+esac
+
+thisweek=$(date +%U)
+lastweek=$((thisweek - retainweeks))
+
+$verbose \# removing files older than week $lastweek
+
+if [ -z "$suffix" ]; then
+ find $dir -type f -printf '%f\n'
+else
+ find $dir -type f -name "*$suffix" -printf '%f\n'
+fi |
+ while read name
+ do
+ $verbose \# considering $name
+ week=$(expr "$name" : '[^-][^-]*-\([0-9][0-9]*\)-.*')
+ if [ $week -le $lastweek ]; then
+ $verbose \# removing $name
+ $dry_run rm $dir/$name
+ fi
+ done

Return to:

Send suggestions and report system problems to the System administrator.