Linux上并行打包压缩工具

文章目录

Linux上并行打包压缩工具

在 Linux 上,如果需要并行的打包压缩工具以提高多核 CPU 的利用率,可以考虑以下工具:


1. Pigz (Parallel gzip)

  • 用途 :替代 gzip,多线程压缩。

  • 安装

    bash 复制代码
    sudo apt install pigz  # Debian/Ubuntu
    sudo yum install pigz  # RHEL/CentOS
  • 用法

    bash 复制代码
    tar --use-compress-program=pigz -cf archive.tar.gz dir/  # 打包并并行压缩
    pigz -k file  # 压缩文件(保留原文件)

2. Pbzip2 (Parallel bzip2)

  • 用途 :替代 bzip2,多线程压缩。

  • 安装

    bash 复制代码
    sudo apt install pbzip2  # Debian/Ubuntu
  • 用法

    bash 复制代码
    tar --use-compress-program=pbzip2 -cf archive.tar.bz2 dir/
    pbzip2 -k file  # 压缩文件(-k 保留原文件)

3. Pixz (Parallel xz)

  • 用途 :替代 xz,支持多线程和索引。

  • 安装

    bash 复制代码
    sudo apt install pixz  # Debian/Ubuntu
  • 用法

    bash 复制代码
    tar -I pixz -cf archive.tar.xz dir/  # 打包并压缩
    pixz file  # 直接压缩文件(生成 .xz 文件)

4. Zstd (支持多线程)

  • 用途:现代高性能压缩算法,默认支持多线程。

  • 安装

    bash 复制代码
    sudo apt install zstd  # Debian/Ubuntu
  • 用法

    bash 复制代码
    tar -I 'zstd -T0' -cf archive.tar.zst dir/  # -T0 自动使用所有核心
    zstd -T0 file  # 并行压缩文件

5. GNU Parallel + 传统工具

  • 用途:手动并行化处理多个文件。

  • 示例 (并行压缩多个文件):

    bash 复制代码
    find dir/ -type f | parallel -j $(nproc) gzip {}

6. Fastest Tools (综合建议)

  • 最快压缩zstd(平衡速度/压缩率)。
  • 最高压缩率pixz(多线程 xz)。
  • 兼容性pigz(gzip 替代)。

注意事项:

  • 磁盘 I/O 瓶颈:如果磁盘速度慢,多线程可能无法显著提速。
  • 压缩率/速度权衡zstd > pigz > pbzip2 > pixz(从左到右,压缩率提高但速度降低)。
  • 检查 CPU 使用 :用 htop 观察是否所有核心满载。

根据需求选择合适的工具即可!


tar和zstd多线程压缩和解压

在 Linux 中使用 tarzstd 进行多线程压缩和解压可以显著提高速度。以下是具体方法:


1. 多线程压缩(打包+压缩)

bash 复制代码
tar -I 'zstd -T0' -cf 输出文件.tar.zst 要压缩的目录或文件

或:

bash 复制代码
tar --use-compress-program='zstd -T0' -cf 输出文件.tar.zst 要压缩的目录或文件
  • -T0:让 zstd 自动使用所有可用的 CPU 线程。
  • 如果想限制线程数,例如用 4 线程:-T4

2. 多线程解压

bash 复制代码
tar -I 'zstd -T0' -xf 输入文件.tar.zst

或:

bash 复制代码
tar --use-compress-program='zstd -T0' -xf 输入文件.tar.zst

3. 额外优化选项(可选)

  • 调整压缩级别(1~19,默认 3):

    bash 复制代码
    tar -I 'zstd -T0 -3' -cf output.tar.zst input_dir
    • 级别越高压缩率越好,但速度更慢(-3 是速度和压缩率的平衡点)。
  • 快速压缩(低压缩率,高速度):

    bash 复制代码
    tar -I 'zstd -T0 --fast' -cf output.tar.zst input_dir
  • 解压到指定目录

    bash 复制代码
    tar -I 'zstd -T0' -xf input.tar.zst -C 目标目录

4. 直接使用 zstd 命令(非 tar 整合)

  • 多线程压缩文件

    bash 复制代码
    zstd -T0 文件名
  • 多线程解压文件

    bash 复制代码
    zstd -d -T0 文件名.zst

原理说明

  • zstd 原生支持多线程(通过 -T 参数),而 tar 负责文件打包。
  • 使用 -I--use-compress-programzstd 作为压缩程序集成到 tar 流程中。

注意事项

  • 确保系统已安装 zstd 工具(安装命令:sudo apt install zstdyum install zstd)。
  • 解压时无需指定线程数,zstd 会自动检测,但显式声明 -T0 可确保多线程生效。

通过这种方法,你可以充分利用多核 CPU 加速归档和压缩过程。


使用 tar 和 zstd 打包压缩文件

zstd (Zstandard) 是一种现代的快速压缩算法,提供了很好的压缩比和速度平衡。以下是使用 tar 和 zstd 打包压缩文件的方法:

基本用法

打包并压缩目录

bash 复制代码
tar -I 'zstd -19 -T0' -cf archive.tar.zst directory/

bash 复制代码
tar --use-compress-program='zstd -19 -T0' -cf archive.tar.zst directory/

解压

bash 复制代码
tar -I 'zstd -d' -xf archive.tar.zst

bash 复制代码
tar --use-compress-program='zstd -d' -xf archive.tar.zst

常用选项说明

  • -I--use-compress-program:指定压缩程序
  • -c:创建新归档
  • -x:解压归档
  • -f:指定归档文件名
  • -v:显示详细过程(可选)
  • -T0:使用所有可用CPU线程
  • -19:压缩级别(1-19,19为最高压缩率)

常用压缩级别示例

快速压缩(较低压缩率)

bash 复制代码
tar -I 'zstd -3 -T0' -cf archive.tar.zst directory/

平衡压缩

bash 复制代码
tar -I 'zstd -9 -T0' -cf archive.tar.zst directory/

最佳压缩(最高压缩率)

bash 复制代码
tar -I 'zstd -19 -T0' -cf archive.tar.zst directory/

查看压缩文件内容

不解压查看内容:

bash 复制代码
tar -I 'zstd -d' -tf archive.tar.zst

注意事项

  1. 较新版本的 tar 可能直接支持 zstd:

    bash 复制代码
    tar -caf archive.tar.zst directory/  # -a 自动根据后缀选择压缩方式
  2. zstd 压缩文件通常使用 .zst.zstd 扩展名

  3. 确保系统已安装 zstd:

    bash 复制代码
    sudo apt install zstd    # Debian/Ubuntu
    sudo yum install zstd    # CentOS/RHEL
    sudo brew install zstd   # macOS (Homebrew)

这种方法结合了 tar 的归档能力和 zstd 的高效压缩,特别适合需要快速压缩/解压或处理大文件的场景。

相关推荐
ZZH1120KQ1 小时前
Linux 进程和计划任务管理
linux
Linux运维技术栈3 小时前
Vim 命令大全:从入门到精通
linux·编辑器·vim
c7_ln3 小时前
Linux基本指令(包含vim,用户,文件等方面)超详细
linux·操作系统·vim
晨曦backend4 小时前
Vim 撤销 / 重做 / 操作历史命令汇总
linux·编辑器·vim
晨曦backend4 小时前
Vim 插件管理:MiniBufExplorer 使用指南
linux·编辑器·vim
fatiaozhang95275 小时前
中兴B860AV1.1_晨星MSO9280芯片_4G和8G闪存_TTL-BIN包刷机固件包
android·linux·adb·电视盒子·av1·魔百盒刷机
froxy5 小时前
Panthor 开源方案与 Mesa 图形库的技术解析
linux·开源
nice_evil5 小时前
华为Openeuler/Linux/CentOs 网络配置及故障排查/远程连接设置ssh/ibmc等问题及解决方案合集
linux·网络·centos·openeuler·网络配置与激活
liulilittle5 小时前
OpenSSL 的 AES-NI 支持机制
linux·运维·服务器·算法·加密·openssl·解密
无聊的小坏坏5 小时前
进程间通信详解(三):Linux进程信号深度解析
linux·bash