在数据处理、系统运维和软件分发中,我们经常需要将多个文件或整个目录整理成一个整体,并尽可能减小其体积以便存储或传输。这一过程通常分为两个步骤:打包(归档)与压缩。在 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.gztar-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