From 00b6ac1d1b2b26053d6b7be3e773295874afc399 Mon Sep 17 00:00:00 2001 From: Christoph Date: Mon, 2 Apr 2018 19:36:49 +0200 Subject: [PATCH] Add script 'cleanup_from_old_files.sh'. --- cleanup_from_old_files.sh | 178 ++++++++++++++++++++++++ conf/cleanup_from_old_files.conf.sample | 20 +++ 2 files changed, 198 insertions(+) create mode 100755 cleanup_from_old_files.sh create mode 100644 conf/cleanup_from_old_files.conf.sample diff --git a/cleanup_from_old_files.sh b/cleanup_from_old_files.sh new file mode 100755 index 0000000..d4b9ef3 --- /dev/null +++ b/cleanup_from_old_files.sh @@ -0,0 +1,178 @@ +#!/usr/bin/env bash + +working_dir="$(dirname $(realpath $0))" +conf_file="${working_dir}/conf/cleanup_from_old_files.conf" + +LOCK_DIR="/tmp/clean_trash.LOCK" + + +# ------------- +# - Some functions +# ------------- + +clean_up() { + + # Perform program exit housekeeping + rm -rf "$LOCK_DIR" + exit $1 +} + +echononl(){ + if $terminal ; then + echo X\\c > /tmp/shprompt$$ + if [ `wc -c /tmp/shprompt$$ | awk '{print $1}'` -eq 1 ]; then + echo -e -n "$*\\c" 1>&2 + else + echo -e -n "$*" 1>&2 + fi + rm /tmp/shprompt$$ + fi +} + +fatal(){ + echo "" + if $terminal ; then + echo -e " [ \033[31m\033[1mFatal\033[m ]: $*" + echo "" + echo -e " \033[31m\033[1mScript was terminated\033[m!" + else + echo " [ Fatal ]: $*" + echo "" + echo " Script was terminated...." + fi + echo "" + clean_up 1 +} + +error (){ + echo "" + if $terminal ; then + echo -e " [ \033[31m\033[1mError\033[m ]: $*" + else + echo "[ Error ]: $*" + fi + echo "" +} + +warn (){ + echo "" + if $terminal ; then + echo -e " [ \033[33m\033[1mWarning\033[m ]: $*" + else + echo "[ Warning ]: $*" + fi + echo "" +} +info (){ + + if $terminal ; then + echo "" + echo -e " [ \033[32m\033[1mInfo\033[m ]: $*" + echo "" + fi +} + +echo_done() { + if $terminal ; then + echo -e "\033[75G[ \033[32mdone\033[m ]" + fi +} +echo_failed(){ + if $terminal && $LOGGING ; then + echo -e "\033[75G[ \033[1;31mfailed\033[m ]" + fi +} +echo_skipped() { + if $terminal && $LOGGING ; then + echo -e "\033[75G[ \033[33m\033[1mskipped\033[m ]" + fi +} + +trim() { + local var="$*" + var="${var#"${var%%[![:space:]]*}"}" # remove leading whitespace characters + var="${var%"${var##*[![:space:]]}"}" # remove trailing whitespace characters + echo -n "$var" +} + + +# ------------- +# - Running in a terminal? +# ------------- + +if [[ -t 1 ]] ; then + terminal=true +else + terminal=false +fi + + +# ------------- +# - Read Configurations from $conf_file +# ------------- + +if [[ ! -f "$conf_file" ]]; then + fatal " Configuration file '$(basename ${conf_file})' not found!" +else + source "$conf_file" +fi + +[[ -z "$(trim $dirs_to_cleanup)" ]] && fatal "No directory given!" +[[ -z "$days" ]] && days=31 + + +# ------------- +# - Job is already running? +# ------------- + +# - If job already runs, stop execution.. +# - +if mkdir "$LOCK_DIR" 2> /dev/null ; then + + # - Remove lockdir when the script finishes, or when it receives a signal + # - + trap clean_up SIGHUP SIGINT SIGTERM + +else + + datum="$(date +"%d.%m.%Y %H:%M")" + + msg=" [ Error ]: A previos instance of '$(basename $0)' seems already be running.\n\n Exiting now.." + + error "A previos instance of the script '$(basename $0)' seems already be running." + + exit 1 + +fi + + +traverse() { + + while IFS='' read -r -d '' name ; do + + [[ "$name" = ".." ]] && continue + [[ "$name" = "." ]] && continue + traverse "$name" + + done < <(find "$1" -mindepth 1 -maxdepth 1 -type d -print0) + + find "$1" -mindepth 1 -maxdepth 1 -type f -mtime +${days} -exec rm -f "{}" \; > /dev/null 2>&1 + +} + +for dir in $dirs_to_cleanup ; do + info "Delete files from directory \033[1m${dir}\033[m older than \033[1m${days}\033[m days .." + traverse "$dir" +done + +# - Delete empty sub-directories +# - +if $terminal ; then + echo -e "\033[32m\033[1m-----\033[m" +fi +for dir in $dirs_to_cleanup ; do + info "Cleanup trash directory \033[1m${dir}\033[m from empty directories .." + find $dir -depth -mindepth 1 -type d -empty -delete +done + +clean_up 0 diff --git a/conf/cleanup_from_old_files.conf.sample b/conf/cleanup_from_old_files.conf.sample new file mode 100644 index 0000000..be17fcf --- /dev/null +++ b/conf/cleanup_from_old_files.conf.sample @@ -0,0 +1,20 @@ +# ------------------------------------ +# - Settings for script clean_trash.sh +# ------------------------------------ + +# - days +# - +# - Files older then 'days' will be deleted. +# - +# - Defaults to: days=31 +# - +#days=31 + +# - dirs_to_cleanup +# - +# - Directories where files older than given days will be deleted. +# - +# - Example: +# - trash_dirs="/data/samba/transfer/.Trash /data/samba/no-backup-share/multimedia/.Trash" +# - +#dirs_to_cleanup=""