Zstandard (zstd) 使用教程

Zstandard(简称 zstd)是一个现代的压缩算法,旨在提供非常高效的压缩比和速度。它被设计为适用于多种场景,从高压缩比到高压缩速度都有优化,并支持多线程。此教程将带你了解如何在 Linux 系统上使用 zstd 进行文件和目录的压缩与解压。


1. 安装 Zstandard

首先,确保你的 Linux 系统上安装了 zstd

Debian/Ubuntu 系统上,使用以下命令安装:

sudo apt update
sudo apt install zstd

CentOS/RHEL 系统上,使用以下命令安装:

sudo yum install zstd

2. 压缩文件

2.1 压缩单个文件

使用 zstd 来压缩一个文件非常简单。基本命令格式如下:

zstd input.txt

这将压缩 input.txt 文件,并生成 input.txt.zst 文件。压缩后的文件会保留原文件的扩展名(.zst)。

你也可以为输出文件指定名称:

zstd input.txt -o output.zst

2.2 使用多线程压缩

zstd 支持多线程压缩,利用多核 CPU 提高压缩速度。可以使用 -T 选项指定使用的线程数:

zstd -T8 input.txt
  • -T8:使用 8 个线程进行压缩。

你可以根据你的 CPU 核心数调整 -T 后的数字,默认情况下,zstd 会自动选择合适的线程数。

2.3 压缩多个文件

可以同时压缩多个文件,使用以下命令:

zstd file1.txt file2.txt

这将生成 file1.txt.zstfile2.txt.zst 两个压缩文件。如果你想将它们打包到一个文件中,可以使用:

zstd file1.txt file2.txt -o files.tar.zst

这将创建一个包含 file1.txtfile2.txt 的压缩包 files.tar.zst

2.4 压缩整个文件夹

zstd 允许你直接递归地压缩一个文件夹,而不需要使用 tar。使用 -r 参数:

zstd -r -T8 /path/to/directory -o archive.zst
  • -r:递归压缩目录中的所有文件和子目录。

  • -T8:使用 8 个线程进行压缩。

  • /path/to/directory:指定要压缩的文件夹。

  • -o archive.zst:指定压缩后的输出文件名。


3. 解压缩文件

3.1 解压 .zst 文件

解压一个 .zst 文件非常简单,使用 -d 参数:

zstd -d archive.zst

这会解压 archive.zst 文件,并生成 archive 文件。如果你想指定输出文件的名称,可以使用 -o 参数:

zstd -d archive.zst -o output.txt

3.2 解压多个文件

如果你压缩了多个文件,你可以解压它们:

zstd -d file1.txt.zst file2.txt.zst

3.3 解压并保留原文件名

如果你希望在解压时保持原文件名(例如:file1.txt 而不是 file1.txt.zst),可以使用 -o 参数,结合通配符(*):

zstd -d *.zst

4. 高级功能

4.1 压缩级别

zstd 支持多种压缩级别,默认是 3,你可以通过 -# 参数调整压缩级别(0 到 22)。级别越高,压缩比越好,但速度会变慢。

zstd -19 input.txt
  • -19:使用压缩级别 19,较高的压缩比,但压缩速度较慢。

4.2 自定义字典

如果你有一个包含重复模式的大型数据集,可以创建和使用自定义字典来提高压缩效率。首先,使用 zstd 生成字典:

zstd --train dictionary_files/*.txt -o dictionary_file

然后使用自定义字典来压缩文件:

zstd -D dictionary_file input.txt

4.3 直接管道压缩与解压

zstd 还支持直接与其他命令结合使用,通过管道将数据流传输给压缩工具。例如,你可以用管道直接压缩一个命令输出的内容:

cat input.txt | zstd > input.txt.zst

同样地,你可以通过管道将 .zst 文件直接解压:

zstd -d archive.zst -c | tar -xf -

5. 总结

zstd 是一个高效且灵活的压缩工具,它能够在不牺牲压缩率的前提下,提供非常快的压缩和解压速度。以下是本教程中的重点:

  • 压缩单个文件zstd input.txt

  • 压缩文件夹zstd -r -T8 /path/to/directory -o archive.zst

  • 使用多线程zstd -T8 input.txt

  • 解压文件zstd -d archive.zst

  • 调整压缩级别zstd -19 input.txt

  • 创建和使用自定义字典zstd --train