#!/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