拆分大日志文件

碰到日志文件太大,咋整


#!/bin/bash
#
# 按段拆分大文件,不暴增磁盘占用
#
set -e

src="file.log"
prefix="file"
ext=".log"
chunk=$((  1024 * 1024 * 1024 * 1))   # 1G

size=$(stat -c%s "$src")
if [ "$size" -le 0 ]; then
    echo "empty file"
    exit 1
fi

# 向上取整,算总片数
total=$(( (size + chunk - 1) / chunk ))

for ((idx=total; idx>=1; idx--)); do
    size=$(stat -c%s "$src")
    part=$(printf "%s-%03d%s" "$prefix" "$idx" "$ext")

    if [ "$size" -le "$chunk" ]; then
        mv "$src" "$part"
        echo "created $part (last part)"
        break
    fi

    tail -c "$chunk" "$src" > "$part"
    truncate -s $((size - chunk)) "$src"
    echo "created $part"
done