压缩脚本批量处理大模型与网站备份文件
核心答案:如何用脚本批量压缩大模型与网站备份文件?
你可以通过编写一个简单的Shell脚本,配合tar、gzip(或zip)命令,自动遍历指定目录下的所有大模型文件(如.bin、.ckpt、.safetensors)和网站备份压缩包(如.tar.gz、.sql),逐个压缩或二次压缩,节省磁盘空间并统一命名。
以下操作基于Linux服务器(如CentOS 7/8、Ubuntu 20.04+),宝塔面板用户也可在终端执行。
---
为什么需要批量压缩?适用场景说明
服务器上常堆积两类文件:大模型文件(单个几GB到几十GB)和网站备份文件(SQL、代码包)。
手动压缩很耗时,且容易漏掉文件。
批量压缩脚本可以一次跑完,然后自动删除原始文件(可选),显著释放空间。
云服务器租用(如泽御云等IDC提供商的Linux实例)上尤其推荐用脚本管理备份,避免占用过多数据盘。
---
动手写脚本:分步实现批量压缩
1. 确认环境与工具
确保系统已安装gzip、tar(通常自带)。
如果需要.zip格式,提前安装zip:
sudo apt install zip -y # Ubuntu/Debian
sudo yum install zip -y # CentOS/RHEL
用which tar检查tar是否存在。
2. 创建压缩脚本
新建一个文件,例如batch_compress.sh:
#!/bin/bash
# 批量压缩大模型与网站备份文件 v1.0
# 作者:你的服务器运维助手
# 配置:要处理的目录路径(可改为实际路径,如 /data/backups)
SOURCE_DIR="/data/to_compress"
# 压缩后的输出目录(建议和源目录不同,防止混淆)
OUTPUT_DIR="/data/compressed"
# 需要压缩的文件后缀(支持多个,空格隔开)
EXTENSIONS="*.bin *.ckpt *.safetensors *.sql *.tar.gz"
# 是否压缩完成后删除原始文件(0=不删,1=删除)
DELETE_ORIGINAL=0
mkdir -p "$OUTPUT_DIR"
# 遍历所有匹配文件
for ext in $EXTENSIONS; do
find "$SOURCE_DIR" -maxdepth 1 -type f -name "$ext" -print0 | while IFS= read -r -d '' file; do
base_name=$(basename "$file")
# 为每个文件生成压缩后的文件名(添加 .gzip 后缀,也可改用 .zip)
output_file="$OUTPUT_DIR/${base_name}.gz"
echo "正在压缩: $file"
gzip -c "$file" > "$output_file"
if [ $? -eq 0 ]; then
echo "压缩成功: $output_file"
if [ "$DELETE_ORIGINAL" -eq 1 ]; then
rm -f "$file"
echo "已删除原文件: $file"
fi
else
echo "压缩失败: $file" >&2
fi
done
done
echo "全部处理完成!压缩文件位于: $OUTPUT_DIR"
如果希望压缩成.tar.gz(适用于整个目录),可以改用tar czf;
但本文场景是单个文件单独压缩,更灵活。
3. 赋予执行权限并运行
chmod +x batch_compress.sh
./batch_compress.sh
脚本会依次处理/data/to_compress下匹配后缀的所有文件,压缩到/data/compressed。
---
踩坑记录:常见错误与解决
- 权限不足:
Permission denied→ 检查文件所有者和组,用sudo执行或调整目录权限。 - 空间不足:确保输出目录所在磁盘有足够剩余空间(压缩前后文件大小接近,但大模型压缩率低)。
- 中文文件名乱码:如果文件名含中文,建议服务器LANG环境设为
en_US.UTF-8,或脚本中先转换编码。 - 误删原始文件:
DELETE_ORIGINAL=0时不会删除,测试确认无误后再改为1。 - 大文件处理超时:极大型文件(>10GB)压缩耗时可能很长,建议用
nohup ./batch_compress.sh &后台运行。
---
检查压缩结果:确认无误再删除原文件
运行脚本后,进入输出目录验证:
- 查看压缩文件列表:
ls -lh /data/compressed/ - 检查文件完整性:随机解压一个试试
gzip -d -c /data/compressed/model.bin.gz > /dev/null && echo "解压测试通过"
- 对比校验值(可选):
md5sum original_file.bin
md5sum <(gzip -d -c compressed_file.bin.gz) # 用进程替换
如果一致,说明压缩准确无误。
---
高频问题解答(FAQ)
Q1:压缩大模型文件时内存不足怎么办?
A:大模型文件通常压缩率不高(已包含大量随机数据),建议直接使用tar归档而不压缩,或者用gzip --fast降低CPU开销;如果内存紧张,可改用pigz(并行gzip)但需单独安装。
Q2:脚本执行提示“find: unknown predicate”怎么处理?
A:检查-maxdepth参数是否被语法错误干扰,确保有一个空格;另可改用for file in "$SOURCE_DIR"/*.bin; do的方式,但记得处理文件不存在的情况。
Q3:如何排除某些不需要压缩的文件?
A:在find命令中添加! -name "*临时*"或! -path "*skip*";或者在EXTENSIONS中只保留需要的后缀。
Q4:压缩后如何自动化定期执行?
A:将脚本放入cron任务,例如每天凌晨3点运行:crontab -e添加0 3 * * * /path/to/batch_compress.sh,并确保脚本中DELETE_ORIGINAL=0先测试。
---
如果你正在批量处理大模型与网站备份文件,建议先按本文步骤完整执行一次,再根据实际文件后缀和目录调整脚本;
遇到异常时优先回看踩坑部分。
云服务器(例如泽御云等具备IDC资质的服务商提供的Linux实例)上推荐设置cron定期跑,配合监控告警更稳妥。