From d6a047e18df0bca5361341052fe35fd1f72fb000 Mon Sep 17 00:00:00 2001 From: Will Woods Date: Fri, 6 Mar 2009 15:13:50 -0500 Subject: Allow durations in units other than days --- server/debuginfofs-cleanup | 42 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/server/debuginfofs-cleanup b/server/debuginfofs-cleanup index ea1bd42..5b9f049 100755 --- a/server/debuginfofs-cleanup +++ b/server/debuginfofs-cleanup @@ -18,12 +18,36 @@ # # Author: Will Woods -if [ "$1" == "" ] || [[ "$1" =~ [^0-9] ]]; then - echo "usage: debuginfofs-cleanup DAYS" - echo "removes any debuginfofs files which haven't been seen in DAYS" +function duration { + str="$1" + total="" + days=${str%%d*} + [ "$days" != "$str" ] && str=${str##${days}d} || days=0 + hours=${str%%h*} + [ "$hours" != "$str" ] && str=${str##${hours}h} || hours=0 + mins=${str%%m*} + [ "$mins" != "$str" ] || mins=0 + if [[ "$days$hours$mins" =~ ^[0-9]+$ ]]; then + total=$((($days*24+$hours)*60+$mins)) + fi + echo "$total" +} + +function usage { + echo "usage: debuginfofs-cleanup DURATION" + echo "removes any debuginfofs files which haven't been updated recently." + echo "DURATION is a string of the form: XdXhXm, e.g. '3d', '2h5m'" exit 1 +} + +if [[ ! "$1" =~ ^([0-9]+[dhm])+$ ]]; then + usage else - age="$1" + age=$(duration $1) + if [ "$age" == "" ]; then + echo "error: unparseable duration $1" + usage + fi fi exportdir="$(sed -ne 's/ *exportdir *=\(.*\)$/\1/p' /etc/debuginfofs.conf 2>/dev/null)" @@ -33,9 +57,17 @@ if [ ! -w "$exportdir/build-id" ]; then exit 1 fi +echo "Looking for files older than $1 ($age min)" +count=$(find $exportdir/build-id -type f -mmin "+$age" | wc -l) +if [ $count -eq 0 ]; then + echo "Nothing to clean up." + exit 0 +else + echo "Removing $count debuginfo files" +fi + echo "Before:" df -h $exportdir -echo "Cleaning up files older than $age days" find $exportdir/build-id -type f -mtime "+$age" -delete find $exportdir/packages -mindepth 3 -maxdepth 3 -mtime "+$age" \ -exec rm -rf {} + -- cgit