#!/bin/bash set -e test_if_ancient() { d=$1 ttl=$2 mtime=$(stat --format "%Y" "$d") tod=$(($mtime + 3600*24*$ttl)) now=$(date +%s) [ "$optVerbose" -ge "2" ] && echo "Consider $d: ttl=$ttl, mod time=$mtime, time of death=$tod, now=$now" [ "$tod" -lt "$now" ] && return 0 return 1 } cleanit() { d=$1 [ -d "$d" ] || exit 0 [ -e $d/.publish.ttl ] && ttl=`cat $d/.publish.ttl` if test_if_ancient $d $ttl; then [ "$optVerbose" -ge "1" ] && echo "Purge $d" rm -rf "$d" fi return 0 } usage() { cat << EOF usage: $0 [OPTIONS] OPTIONS: -h Show this message. -v Give verbose output. Be more verbose with -vv. EOF } optVerbose=0 while getopts "vh" OPTION; do case $OPTION in h) usage ;; v) optVerbose=$(($optVerbose + 1)) ;; esac done ttl=14 [ -e ~/.publish-purge.cfg ] && . ~/.publish-purge.cfg # We would not like that cleanit removes files in directories that mallory set # as $base if ! stat --format=%a ~/.publish-purge.cfg | egrep -q ".00"; then echo "For security reasons ~/.publish-purge.cfg should have no perms for group and others." fi if [ -z "$base" ]; then echo "Please setup \$base in ~/.publish-purge.cfg" exit 1 fi if ! [ -e "$base" ]; then echo "Unknown base directory $base" exit 1 fi cd $base # We would not like to accidentily delete files in the wrong directory, hence # the paranoia check if ! [ -e .publish-purge.token ]; then echo "Place a .publish-purge.token in $base" exit 1 fi for d in *; do pushd . > /dev/null # we launch a subshell so that setting $ttl within the subshell # is not visible outside the subshell ( cleanit $d ) popd > /dev/null done