Bash脚本日志文件轮换

Joh*_*Doe 7 bash logging file rotation

我的bash脚本生成一个日志文件.现在我想实现一些日志文件轮换.
让我们说第一次将它命名为somelog.log,下次将其重命名为somelog.log.1和新的日志文件somelog.log.
第三次新日志再次是somelog.log,但somelog.log.1重命名为somelog.log.2,旧somelog.log重命名为somelog.log.1.
我将能够最多授予例如5.

这是否在此之前完成(示例脚本),任何建议.我很感激任何建议.

bzi*_*age 3

试试这个 bash 函数,它有两个参数:

  1. 文件旋转时应超过的最大兆字节数(否则保持不变)
  2. 文件名的完整路径。

来源:

function rotate () {
  # minimum file size to rotate in MBi:
  local MB="$1"
  # filename to rotate (full path)
  local F="$2"
  local msize="$((1024*1024*${MB}))"
  test -e "$F" || return 2

  local D="$(dirname "$F")"
  local E=${F##*.}
  local B="$(basename "$F" ."$E")"

  local s=

  echo "rotate msize=$msize file=$F -> $D | $B | $E"
  if [ "$(stat --printf %s "$F")" -ge $msize ] ; then
     for i in 8 9 7 6 5 4 3 2 1 0; do 
       s="$D/$B-$i.$E"
       test -e "$s" && mv $s "$D/$B-$((i+1)).$E"
  # emtpy command is need to avoid exit iteration if test fails:
       :;
     done &&
     mv $F $D/$B-0.$E
  else
     echo "rotate skip: $F < $msize, skip"
  fi
  return $?
}
Run Code Online (Sandbox Code Playgroud)