gzip批量压缩多个日志文件时,一次处理多个文件名参数,每个生成独立.gz文件;推荐加-k保留原文件,-v查看过程,-r递归处理子目录,配合find可按时间、大小等条件筛选,压缩后用-l和-t验证。

Linux 中用 gzip 批量处理多个日志文件,核心是理解它一次可处理多个文件名参数,但每个文件会单独生成一个 .gz 文件——不是打包成一个归档,而是“一对多”压缩。
直接压缩多个日志文件
最常用、最直观的方式:把多个日志文件名一次性传给 gzip。
- 例如压缩当前目录下所有
.log文件:gzip *.log
会生成access.log.gz、error.log.gz、app.log.gz等,原始文件默认被删除。 - 若想保留原始日志文件(强烈推荐用于生产环境):
gzip -k *.log - 加
-v查看每一步压缩效果:gzip -kv *.log
输出类似:access.log: 82.3% -- replaced with access.log.gz
按路径批量压缩(含子目录)
如果日志分散在多层目录中(如 /var/log/nginx/、/var/log/apache2/),可用 -r 递归压缩:
- 压缩
/var/log下所有普通日志文件(不压缩子目录本身,只压其中的文件):gzip -rk /var/log-k保证原始日志不丢,-r自动遍历所有层级。 - 注意:
gzip -r不会打包目录结构,只是对每个匹配的常规文件单独压缩;符号链接、设备文件等会被跳过。
配合 find 精准筛选再压缩
当需要按时间、大小或名称模式筛选(比如只压 7 天前的 .log 文件):
- 压缩 7 天前的所有
.log文件(保留原文件):find /var/log -name "*.log" -mtime +7 -exec gzip -k {} \; - 压缩大于 10MB 的日志:
find /var/log -name "*.log" -size +10M -exec gzip -k {} \; - 用
+替代\;可提升效率(一次传多个文件给 gzip):find /var/log -name "*.log" -mtime +7 -exec gzip -k {} +
压缩后验证与清理建议
批量操作后建议快速确认结果是否符合预期:
- 检查压缩比和完整性:
gzip -l *.gz—— 列出每个压缩包的原始大小、压缩后大小、压缩率 - 测试某个压缩包是否损坏:
gzip -t nginx-access.log.gz—— 输出OK表示正常 - 安全起见,压缩前可先用
ls -lh *.log记录原始大小;确认无误后再删旧文件(不建议脚本自动删,留 24 小时观察)


















