﻿#!/bin/bash

NR_ARCHIVES=30
MINLENGTH=$((10 * 1024 * 1024))

DIR="$1"

function suffix() # nr -> single char 0-9 a-z A-Z
{
  chars=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
  echo "${chars:$1:1}"
}

function rotate() # /dir/logname.log
{
  rm -f $1.`suffix $NR_ARCHIVES`.gz 

  for((i=$(($NR_ARCHIVES-1)); i>0; i--))
  do
    for LOG in $1.`suffix $i`.gz
    do
      if [ -e "$LOG" ]
      then
        B=`dirname "$LOG"`/`basename "$LOG" .$(suffix $i).gz`
        mv -f "$LOG" "$B".`suffix $(($i+1))`.gz
      fi
    done
  done
}


for LOGFILE in "$DIR"/*.log
do
  if [ -s "$LOGFILE" -a `stat -c %s $LOGFILE` -gt $MINLENGTH  ]
  then
    echo Rotating $LOGFILE
    rotate "$LOGFILE"
    cp "$LOGFILE" "$LOGFILE".1
    cat /dev/null >"$LOGFILE"
    gzip "$LOGFILE".1
  fi
done


