utils/archive_logs.sh
2025-09-18 03:28:41 +00:00

97 lines
1.9 KiB
Bash
Executable File

#!/bin/bash
function usage {
echo -n "Usage: ${0}"
echo -n " -L <log directory>"
echo -n " [ -A <archive_logs_dir> (default /works/archive/logs)]"
echo -n " [-D <older than time criteria> (default: '2 days ago')]"
echo -n " [-W <extra wild card> (default: '*.log.*')]"
echo
exit 1
}
echo Starting $0 $*
LogDir=${1}
LogArchiveDir=/works/archive/logs
DateCriteria="2 days ago"
ExtraWildCard=
# ---------------- cmdline
while getopts "A:L:D:W:" opt; do
case ${opt} in
A )
LogArchiveDir=$OPTARG
;;
L )
LogDir=$OPTARG
;;
D )
DateCriteria=$OPTARG
;;
W )
ExtraWildCard=$OPTARG
;;
\? )
echo "Invalid option: -$OPTARG" >&2
usage
;;
: )
echo "Option -$OPTARG requires an argument." >&2
usage
;;
esac
done
# ---------------- cmdline
if [ "${LogDir}" == "" ]
then
usage
fi
Cmd="mkdir -p ${LogArchiveDir}"
echo ${Cmd} && eval ${Cmd}
echo "Looking for log files older than '${DateCriteria}' in ${LogDir}"
Oldest=$(date -d "${DateCriteria}" '+%Y-%m-%d %H:%M:%S')
Cmd="find ${LogDir}/"
Cmd+=" '('"
Cmd+=" -name '*.log'"
Cmd+=" -o -name '*.log.*'"
if [ "${ExtraWildCard}" != "" ]; then
Cmd+=" -o -name '${ExtraWildCard}'"
fi
Cmd+=" ')'"
Cmd+=" -type f"
Cmd+=" -not -newermt \"${Oldest}\""
echo $Cmd
files=$(eval ${Cmd})
if [ "$files" == "" ]
then
echo "No files found older than ${Oldest} in ${LogDir}"
else
echo Archiving files:
echo -----------------
echo ${files}
oldest_file=$(ls -t ${files} | tail -1)
youngest_file=$(ls -tr ${files} | tail -1)
tstmp1=$(stat --printf '%y' ${oldest_file})
tstmp2=$(stat --printf '%y' ${youngest_file})
tmsig="$(date -d "${tstmp1}" +"%Y%m%d_%H%M%S")-$(date -d "${tstmp2}" +"%Y%m%d_%H%M%S")"
echo $tmsig
Cmd="tar zcvf ${LogArchiveDir}/${tmsig}.logs.tgz ${files}"
echo $Cmd
eval $Cmd
rm $files
fi
echo Done ${0} ${*}