summaryrefslogtreecommitdiff
path: root/publish-purge
diff options
context:
space:
mode:
Diffstat (limited to 'publish-purge')
-rwxr-xr-xpublish-purge95
1 files changed, 95 insertions, 0 deletions
diff --git a/publish-purge b/publish-purge
new file mode 100755
index 0000000..8443cf0
--- /dev/null
+++ b/publish-purge
@@ -0,0 +1,95 @@
+#!/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
+
+