#!/bin/bash function usage { echo -n "Usage: ${0}" echo -n " -L " echo -n " [ -A (default /works/archive/logs)]" echo -n " [-D (default: '2 days ago')]" echo exit 1 } echo Starting $0 $* LogDir=${1} LogArchiveDir=/works/archive/logs DateCriteria="2 days ago" # ---------------- cmdline while getopts "A:L:D:" opt; do case ${opt} in A ) LogArchiveDir=$OPTARG ;; L ) LogDir=$OPTARG ;; D ) DateCriteria=$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}/ '(' -name '*.log' -o -name '*.log.*' ')' -type f -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} ${*}