如何在 Linux 中压缩文件和目录?

在 Linux 系统中,文件和目录的压缩是一项常见且重要的操作。无论是为了节省存储空间、便于文件传输,还是进行备份管理,掌握压缩技术都能极大地提升工作效率。

Linux 中常用的压缩工具

1. tar:打包利器

tar(Tape Archive)是 Linux 中最常用的打包工具,用于将多个文件或目录合并成一个文件(称为归档文件)。tar 本身不提供压缩功能,但通常与压缩工具(如 gzipbzip2xz)结合使用。

常用选项

  • -c:创建新的归档文件。
  • -x:解压归档文件。
  • -f:指定归档文件名。
  • -v:显示操作过程(详细模式)。
  • -z:通过 gzip 压缩或解压。
  • -j:通过 bzip2 压缩或解压。
  • -J:通过 xz 压缩或解压。

打包示例

将目录 my_folder 打包成 archive.tar

tar -cvf archive.tar my_folder

压缩示例

my_folder 打包并用 gzip 压缩为 archive.tar.gz

tar -zcvf archive.tar.gz my_folder

my_folder 打包并用 bzip2 压缩为 archive.tar.bz2

tar -jcvf archive.tar.bz2 my_folder

my_folder 打包并用 xz 压缩为 archive.tar.xz

tar -Jcvf archive.tar.xz my_folder

解压示例

解压 archive.tar.gz 到当前目录:

tar -zxvf archive.tar.gz

解压 archive.tar.bz2 到指定目录 /tmp

tar -jxvf archive.tar.bz2 -C /tmp

解压 archive.tar.xz

tar -Jxvf archive.tar.xz

查看归档内容

不解压查看 archive.tar.gz 的内容:

tar -ztvf archive.tar.gz

高级用法

  • 追加文件到归档
tar -rvf archive.tar new_file.txt

注意:追加仅适用于未压缩的 .tar 文件。

  • 排除特定文件或目录

打包 my_folder 但排除 .git 目录:

tar -zcvf archive.tar.gz --exclude=.git my_folder
  • 增量备份

第一次备份:

tar -zcvf backup.tar.gz --listed-incremental=snapshot.snar my_folder

后续增量备份:

tar -zcvf backup_incremental.tar.gz --listed-incremental=snapshot.snar my_folder

2. gzip:高效压缩

gzip 是最常用的压缩工具,压缩比适中,速度快,常与 tar 结合使用。

压缩文件

压缩 file.txtfile.txt.gz

gzip file.txt

解压文件

解压 file.txt.gz

gunzip file.txt.gz

保留原始文件

压缩时保留原始文件:

gzip -c file.txt > file.txt.gz

设置压缩级别

gzip 支持 1 到 9 的压缩级别,1 为最快但压缩比低,9 为最慢但压缩比高:

gzip -9 file.txt

查看压缩文件内容

不解压查看 file.txt.gz 的内容:

zcat file.txt.gz

3. bzip2:高压缩比

bzip2 提供比 gzip 更高的压缩比,但压缩速度较慢。

压缩文件

压缩 file.txtfile.txt.bz2

bzip2 file.txt

解压文件

解压 file.txt.bz2

bunzip2 file.txt.bz2

保留原始文件

压缩时保留原始文件:

bzip2 -c file.txt > file.txt.bz2

查看压缩文件内容

不解压查看 file.txt.bz2 的内容:

bzcat file.txt.bz2

4. xz:极高压缩比

xz 是现代压缩工具,压缩比极高,适合需要最大程度节省空间的场景。

压缩文件

压缩 file.txtfile.txt.xz

xz file.txt

解压文件

解压 file.txt.xz

unxz file.txt.xz

保留原始文件

压缩时保留原始文件:

xz -c file.txt > file.txt.xz

设置压缩级别

gzip 类似,xz 支持 1 到 9 的压缩级别:

xz -9 file.txt

5. zip:跨平台兼容

zip 是一种跨平台兼容的压缩格式,适合与 Windows 或 macOS 用户共享文件。

压缩文件或目录

压缩 my_folderarchive.zip

zip -r archive.zip my_folder

解压文件

解压 archive.zip 到当前目录:

unzip archive.zip

解压到指定目录:

unzip archive.zip -d /tmp

查看压缩文件内容

不解压查看 archive.zip 的内容:

unzip -l archive.zip

设置压缩级别

zip 支持 0 到 9 的压缩级别,0 为不压缩,9 为最高压缩:

zip -9 -r archive.zip my_folder

加密压缩

为压缩文件设置密码:

zip -e -r archive.zip my_folder

压缩工具对比

工具

压缩比

压缩速度

解压速度

适用场景

gzip

中等

日常压缩,速度优先

bzip2

中等

需要较高压缩比

xz

极高

很慢

追求最小文件大小

zip

中等

中等

中等

跨平台共享

常见问题

1. 压缩文件过大怎么办?

  • 选择高压缩比工具:尝试 xzbzip2 替代 gzip
  • 分卷压缩:对超大文件,使用 zip 的分卷功能:
zip -r -s 100m archive.zip my_folder

上述命令将 my_folder 压缩为多个 100MB 的分卷文件。

2. 解压时提示 “权限不足”?

确保有目标目录的写权限,或者以 sudo 运行命令:

sudo tar -zxvf archive.tar.gz -C /target/directory

3. 压缩文件损坏怎么办?

尝试修复损坏的压缩文件:

  • 对于 zip 文件:
zip -F damaged.zip --out repaired.zip
  • 对于 tar 文件,尝试忽略错误继续解压:
tar -zxvf damaged.tar.gz --ignore-zeros

4. 如何快速比较压缩前后的文件大小?

使用 du 命令:

du -sh my_folder
du -sh archive.tar.gz

进阶技巧

1. 并行压缩

对于多核 CPU,可以使用 pigz(并行 gzip)或 pbzip2(并行 bzip2)加速压缩:

tar -c my_folder | pigz > archive.tar.gz

安装 pigz

sudo apt install pigz

2. 压缩后直接上传到云存储

将压缩文件直接上传到 AWS S3:

tar -zcvf - my_folder | aws s3 cp - s3://my-bucket/backup.tar.gz

3. 检查压缩文件的完整性

对于 zip 文件:

unzip -t archive.zip

对于 tar.gz 文件,解压到 /dev/null 测试:

tar -zxvf archive.tar.gz -O > /dev/null
原文链接:,转发请注明来源!