Спасибо за ваш вклад, команды seq и tac были новыми для меня.Теперь я нашел время, чтобы закодировать это заново, и я взял некоторые из ваших хороших идей.Моя цель состояла в том, чтобы получить масштабируемое решение, которое легко понять и поддерживать.
Я решил назвать текущий logdir "$ dir.0", потому что некоторые из моих сценариев собирают различные конфигурации конфигурации устройств, которые берутся на себя.ежедневно.Это немного упрощает кодирование для получения различий между "5 и 3 днями ранее" или между "2 днями назад и сегодня".
#! /bin/sh
# Customizeable settings
LOGDIR_BACKUPS=14 # max number of backups
# Directories
LOGDIR_NAME=logs
LOGDIR=$LOGDIR_NAME.0
# Defines
DATE=`date +'%Y%m%d-%H%M'`
function f_rotate_logdirs() {
local dir=$1 # name of logdir folder
local max=$2 # max #
local min=0 # $dir.0 = current logdir
for i in `seq $min $max | tac`
do
case $i in
$max) if [ -d $dir.$i ]; then
rm -f $dir.$i/*
rmdir $dir.$i
fi
;;
$min) if [ -d $dir.$i ]; then
mv $dir.$i $dir.$((i+1))
fi
mkdir $dir.$i
echo $DATE > $dir.$i/0.DATE
;;
*) if [ -d $dir.$i ]; then
mv $dir.$i $dir.$((i+1))
fi
;;
esac
done
}
f_rotate_logdirs $LOGDIR_NAME $LOGDIR_BACKUPS