#!/bin/bash # Standard CSV-Datei mit den Angaben zu den Wikis # Format: [Wiki-ID für Syslog-Meldungen],[Wiki-Data-Pfad],[Anzahl Tage, nach denen entfernt werden soll] csvfile=/srv/www/wikis.csv # auskommentieren, wenn keine Syslog-Meldungen erstellt werden sollen CMDlog="logger -p user.info -t DokuWiki-CleanUp" helpmesg() { owncmd=`basename $0` cat <] $owncmd -h | -? Help-Message Parameter: Comma-separated file with the datas of wikis to clean up. Format: ,, EOF } nscleanup() { if [ ! -d "$1/pages/${2##*$1/pages/}" ] then rm -fr "$1/pages/${2##*$1/pages/}" rm -fr "$1/attic/${2##*$1/pages/}" rm -fr "$1/meta/${2##*$1/pages/}" fi } mediacleanup() { if [ ! -d "$1/pages/${2##*$1/media/}" ] then rm -fr "$1/media/${2##*$1/media/}" rm -fr "$1/media_attic/${2##*$1/media/}" rm -fr "$1/media_meta/${2##*$1/media/}" fi } cleanup() { # $1 ... full path to data directory of wiki # $2 ... number of days after which old files are to be removed # purge files older than $2 days from the attic (old revisions) find "$1"/attic/ -type f -mtime +$2 -print0 | xargs -0r rm -f # remove stale lock files (files which are 1-2 days old) find "$1"/locks/ -name '*.lock' -type f -mtime +1 -print0 | xargs -0r rm -f # remove empty directories in pages # find "$1"/pages/ -depth -type d -mtime +$2 -empty -print0 | xargs -0r rmdir find "$1"/pages/ -depth -type d -mtime +$2 -empty -exec "$0" nscleanup "$1" {} \; # remove files older than $2 days from the cache find "$1"/cache/?/ -type f -mtime +$2 -print0 | xargs -0r rm -f # purge files older than $2 days from the media_attic (old revisions) find "$1"/media_attic/ -type f -mtime +$2 -print0 | xargs -0r rm -f # remove empty directories in medias # find "$1"/media/ -depth -type d -mtime +$2 -empty -print0 | xargs -0r rmdir find "$1"/media/ -depth -type d -mtime +$2 -empty -exec "$0" mediacleanup "$1" {} \; } if [ "$1" == "nscleanup" ] then if [ -n "$2" -a -n "$3" ] then nscleanup "$2" "$3" else echo "Fehler beim Aufruf vom Namespace-Cleanup" fi exit fi if [ "$1" == "mediacleanup" ] then if [ -n "$2" -a -n "$3" ] then mediacleanup "$2" "$3" else echo "Fehler beim Aufruf vom Media-Cleanup" fi exit fi while getopts :h opt do case $opt in h|?) helpmesg exit ;; esac done shift $((OPTIND - 1)) parfiles="$@" if [ ! -n "$parfiles" ] then parfiles="$csvfile" fi for cfile in $parfiles do if [ -r "$cfile" ] then while read csvline do csvline=`echo "$csvline" | grep -v "^#"` if [ -n "$csvline" ] then dwID=`echo "$csvline" | awk -F, '{ print $1 }'` dpath=`echo "$csvline" | awk -F, '{ print $2 }'` days=`echo "$csvline" | awk -F, '{ print $3 }'` if [ -w "$dpath" ] then [ -n "$CMDlog" ] && $CMDlog "cleaning $dwID" cleanup "$dpath" $days [ -n "$CMDlog" ] && $CMDlog "$dwID cleaned" else [ -n "$CMDlog" ] && $CMDlog "Data-path for $dwID not writable!" fi fi done < "$cfile" else [ -n "$CMDlog" ] && $CMDlog "$cfile not readable!" fi done exit