apache2/archive_logfiles.sh

81 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
usage() {
echo
[ -n "$1" ] && echo -e "Error: $1\n"
cat<<EOF
Usage: $(basename $0) -d <log-file-folder>
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