Add script 'archive_logfiles.sh'.

This commit is contained in:
Christoph 2017-07-03 15:29:17 +02:00
parent f02fcc26ab
commit d4d23c5580

80
archive_logfiles.sh Executable file
View File

@ -0,0 +1,80 @@
#!/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