#! /bin/sh # This file is part of BEAM # Copyright (C) 2012-2014 Sergey Poznyakoff # # BEAM is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # BEAM is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with BEAM. If not, see . libdir=@LIBDIR@/beam set -e . $libdir/common.sh set +e dir= suffix= retainweeks=3 dry_run= verbose=: help() { cat <&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 remote=${dir%%:*} if [ "$remote" != "$dir" ]; then beam_rsh="${backup_rsh:-ssh} $remote" localdir=${dir#*:} else beam_rsh= localdir=$dir fi thisweek=$(date +%U) # Warning: do not use shell arithmetic expansions on week numbers, # because weeks prior to 10 begin with 0 and therefore are processed # as octal numbers. This causes grief for weeks 08 and 09. if [ $thisweek -gt $retainweeks ]; then lastweek=$(expr $thisweek - $retainweeks) else lastweek=$(expr $thisweek + 54 - $retainweeks) fi $verbose \# removing from $dir files ending in $suffix and older than week $lastweek if [ -z "$suffix" ]; then beam_exec find $localdir -maxdepth 1 -type f -printf '%f>n' else beam_exec find $localdir -maxdepth 1 -type f -name "*$suffix" -printf '%f>n' fi | while read name do week=$(expr "$name" : '.*-\([0-9][0-9]*\)-[0-9][0-9]*-[0-9][0-9]*.*$') if [ $thisweek -ge $week ]; then if [ $(expr $thisweek - $week) -gt $retainweeks ]; then echo $localdir/$name fi else if [ $(expr $thisweek + 54 - $week) -gt $retainweeks ]; then echo $localdir/$name fi fi done | if [ -z "$dry_run" ]; then beam_exec xargs --no-run-if-empty rm else while read name do echo \# rm $name done fi