在数据处理、系统运维和软件分发中,我们经常需要将多个文件或整个目录整理成一个整体,并尽可能减小其体积以便存储或传输。这一过程通常分为两个步骤:打包(归档)与压缩。在 Linux 生态中,tar负责打包,gzip负责压缩;而在 Python 中,tarfile与gzip模块则提供了等效的程序化接口。
本文将围绕“打包与压缩”这一核心主题,系统讲解如何在Linux 命令行和Python 脚本中高效完成相关操作,涵盖单文件压缩、多文件归档、内容查看、完整性验证以及自动化处理等实用场景。
一、打包与压缩的基本概念
为什么需要先打包再压缩?
- 压缩工具(如 gzip)只能处理单个文件。若直接对目录运行
gzip,会报错。 - 打包工具(如 tar)可将多个文件/目录合并为一个归档文件,但不减小体积。
- 组合使用:先用
tar打包,再用gzip压缩,既保留了文件结构,又实现了体积优化。
最终产物通常是.tar.gz(或.tgz)文件,这是 Linux 下最标准的归档压缩格式。
二、Linux 命令行中的打包与压缩
1. 使用 tar 打包(不压缩)
tar-cf archive.tar /path/to/dir-c:创建新归档-f:指定输出文件名
生成的archive.tar是未压缩的打包文件,体积与原目录相近。
2. 打包并压缩为 .tar.gz
tar-czf backup.tar.gz /path/to/dir-z:启用 gzip 压缩
此命令一步完成打包与压缩,是日常最常用的操作。
3. 解压 .tar.gz 文件
tar-xzf backup.tar.gz-x:解包-z:自动识别 gzip 压缩-f:指定文件
可添加-C /target/dir指定解压路径。
4. 查看归档内容(不解压)
列出文件列表:
tar-tzf backup.tar.gz5. 单文件压缩(仅 gzip)
对于单个日志或文本文件,可直接使用 gzip:
gzipaccess.log# 生成 access.log.gzgunzip access.log.gz