#!/bin/bash

## Simple logrotate script
## http://superglue.it | Danja Vasiliev, 2014
##
## Takes filepath(s) as argument:
## logrotate /www/access.log [/www/error.log] [/www/admin/admin.log]

## backlogs to keep
_ROTATE=7
_DATE=$(date +%d.%m.%y-%H:%M:%S)
_LOGS=( $* )

function err {
  printf %s": "%s"\n" "$(basename $0)" "$1"; exit 1
}

[[ -z $_LOGS ]] && err 'missing input file'
[[ ! -e $_LOGS ]] && err 'input file not readable'

for _FILE in ${_LOGS[@]}; do
  ## get number of backlogs and purge unwanted
  _N=( $(ls -1 -r $_FILE*.gz &>/dev/null || echo '') ) 
  [[ ${#_N[@]} -gt $((_ROTATE-1)) ]] && rm -f ${_N[@]:$((_ROTATE-1)) }
  ## compress and move
  gzip -f $_FILE || err 'failed to gzip file'
  mv $_FILE.gz "$_FILE"_"$_DATE".gz || err 'failed to rename archive'
done

exit 0