diff options
Diffstat (limited to 'backup-cleanup')
-rwxr-xr-x | backup-cleanup | 67 |
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 |