碰到日志文件太大,咋整
#!/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