diff --git a/archive_logfiles.sh b/archive_logfiles.sh new file mode 100755 index 0000000..f984fb6 --- /dev/null +++ b/archive_logfiles.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env bash + + +usage() { + + echo + [ -n "$1" ] && echo -e "Error: $1\n" + + cat< + +EOF +exit 1 +} + + +while getopts d:h opt ; do + case $opt in + d) LOGS_FOLDER=$OPTARG + if [[ -z "$LOGS_FOLDER" ]] ; then + usage "The \"-d\" flag must take one argument (logfile folder)" + elif [[ ! -d "$LOGS_FOLDER" ]] ; then + usage "Directory \"$LOGS_FOLDER\" does not exist" + fi + ;; + h) usage ;; + esac +done + +shift `expr $OPTIND - 1` +[[ $# -eq "0" ]] || usage "Wrong number of arguments" + +if [[ -z "$LOGS_FOLDER" ]] ; then + usage "No logfile folder was given!" +fi + + +#Define the Archived log files location +ARCHIVE_FOLDER=${LOGS_FOLDER}/archive + +mkdir -p $ARCHIVE_FOLDER + +for log in $LOGS_FOLDER/* ; do + + [[ ! -f "$log" ]] && continue + + filename="$(basename $log)" + extension="${filename##*.}" + + # - Only rotated files.. + # - + [[ "$extension" = "log" ]] && continue + + timestamp=$(stat --format '%Y' $log) + date=$(date '+%Y%m%d%H%M' --date="@${timestamp}") + year=${date:0:4} + month=${date:4:2} + day=${date:6:2} + + mkdir -p $ARCHIVE_FOLDER/$year + mkdir -p $ARCHIVE_FOLDER/$year/$month + #mkdir -p $ARCHIVE_FOLDER/$year/$month/$day + + filename="${filename%.*}" + + if [[ "$extension" = "gz" ]]; then + filename="${filename%.*}" + [[ -f "${ARCHIVE_FOLDER}/${year}/${month}/${filename}.${year}-${month}-${day}.gz" ]] && continue + + cp $log ${ARCHIVE_FOLDER}/${year}/${month}/${filename}.${year}-${month}-${day}.gz + else + [[ -f "${ARCHIVE_FOLDER}/${year}/${month}/${filename}.${year}-${month}-${day}.gz" ]] && continue + gzip -c $log > ${ARCHIVE_FOLDER}/${year}/${month}/${filename}.${year}-${month}-${day}.gz + fi + + touch -t "${date}" ${ARCHIVE_FOLDER}/${year}/${month}/${filename}.${year}-${month}-${day}.gz + +done + +exit 0