Ubuntu 22.04使用pigz多线程快速解压/压缩文件
最近搞项目,资料太大,解压时间太久,于是想办法解决。
开贴记录。
1.安装pigz
sudo apt install pigz

2.解压资料
解压命令为
tar --use-compress-program=pigz -xvpf ***.tar.gz
将最后的部分***.tar.gz换成你自己的文件即可
例如
time tar --use-compress-program=pigz -xvpf MYD-LR3568-Distribution-H4.1-V1.0.0.tar.gz
飞快

3.压缩资料
使用命令为
time tar --use-compress-program=pigz -cvpf youfile.tar.gz yourfile/
其中 yourfile.tar.gz 为你要压缩的文件
yourfile/为你要解压到的目录
4.pigz相关资料
pigz首页: https://zlib.net/pigz/
pigz指令手册:https://zlib.net/pigz/pigz.pdf
pigz Github地址:https://github.com/madler/pigz
5.指令手册
因为pigz指令手册是英文的,用AI翻译成中文了
pigz, unpigz - 压缩或解压缩文件
概要
plaintext
pigz [ −cdfhikKlLmMnNqrRtz0..9,11 ][-b blocksize ][-p threads ][-S suffix ][name ... ]
unpigz [ −cfhikKlLmMnNqrRtz ][-b blocksize ][-p threads ][-S suffix ][name ... ]
描述
Pigz 使用多线程来利用多个处理器和核心进行压缩。输入被分割成 128 KB 的块,每个块并行压缩。每个块的单独校验值也并行计算。压缩后的数据按顺序写入输出,并且会根据各个单独的校验值计算一个组合校验值。
生成的压缩数据格式可以是 gzip、zlib 或单条目 zip 格式,使用的是 deflate 压缩方法。压缩过程会产生部分原始 deflate 流,这些流由一个单独的写入线程连接起来,并加上适当的头部和尾部,尾部包含组合校验值。
每个部分原始 deflate 流以一个空的存储块(使用 zlib 的 Z_SYNC_FLUSH 选项)结束,以便在字节边界处结束该部分比特流。这使得部分流可以简单地作为字节序列连接起来。这会为每个输入块的输出增加非常小的 4 到 5 字节开销。
默认的输入块大小是 128K,但可以使用 -b 选项更改。默认情况下,压缩线程的数量设置为在线处理器的数量,可以使用 -p 选项更改。指定 -p 1 则完全不使用线程。
输入块虽然是独立压缩的,但会加载前一个块的最后 32K 作为预设字典,以保持单线程 deflate 压缩的有效性。可以使用 -i 或 --independent 选项关闭此功能,这样块就可以独立解压缩,以便进行部分错误恢复或随机访问。这还会插入一个额外的空块来标记独立块,每个块前面会有九字节序列(十六进制):00 00 FF FF 00 00 00 FF FF。
解压缩无法并行化,至少在没有为此专门准备的 deflate 流的情况下是这样。因此,pigz 使用一个线程(主线程)进行解压缩,但会创建另外三个线程用于读取、写入和校验计算,在某些情况下可以加快解压缩速度。可以通过指定一个进程(-dp 1 或 -tp 1)来关闭并行解压缩。
命令行上的所有选项都会在处理任何文件名之前进行处理。如果命令行上没有提供文件名,或者如果文件名指定为 -(但不是在 -- 之后),则从标准输入读取输入。如果设置了 GZIP 或 PIGZ 环境变量,则在处理任何命令行选项之前,会从它们的值中获取选项,先从 GZIP 中获取,然后从 PIGZ 中获取。
可以使用 pigz -d 或 unpigz 将压缩文件恢复到原始格式。
选项
-#--fast--best
使用指定的数字#调节压缩速度,其中-1或--fast表示最快的压缩方法(压缩率较低),-9或--best表示最慢的压缩方法(压缩率最高)。-0表示不进行压缩。-11使用 Jyrki Alakuijala 的 zopfli 算法,能在严重牺牲执行时间的情况下提高几个百分点的压缩率。默认值是-6。-A--alias xxx
对于从标准输入读取的数据,使用xxx作为任何--zip条目的名称(默认名称是-)。-b--blocksize mmm
将压缩块大小设置为mmmK(默认 128 KiB)。-c--stdout--to-stdout
将所有处理后的输出写入标准输出(不会删除原始文件)。-C--comment ccc
在 gzip 头部或 zip 中央文件头部包含提供的注释。-d--decompress--uncompress
对压缩的输入进行解压缩。-f--force
强制覆盖文件、压缩.gz文件、处理链接并输出到终端。-h--help
显示帮助信息并退出。-H--huffman
使用仅哈夫曼编码策略进行压缩。-i--independent
为了便于损坏恢复,独立压缩各个块。-k--keep
处理后不删除原始文件。-K--zip
压缩为 PKWare zip(.zip)单条目格式。-l--list
列出压缩输入的内容。-L--license
显示 pigz 的许可证信息并退出。-m--no-time
不存储或恢复修改时间。-Nm会存储或恢复文件名,但不存储或恢复修改时间。请注意,选项的顺序很重要。-M--time
存储或恢复修改时间。-nM会存储或恢复修改时间,但不存储或恢复文件名。请注意,选项的顺序很重要。修改时间仅为常规文件存储,不为管道存储。-n--no-name
不存储或恢复文件名或修改时间。这是解压缩时的默认设置。如果文件名未从头部恢复,则去除后缀后的压缩文件名即为解压缩后的文件名。如果修改时间未从头部恢复,则使用压缩文件的修改时间(而不是当前时间)。-N--name
存储或恢复文件名和修改时间。这是压缩时的默认设置。-p--processes n
最多允许n个进程(默认是在线处理器的数量)。-q--quiet--silent
不打印任何消息,即使发生错误也不打印。-r--recursive
处理所有子目录的内容。-R--rsyncable
为rsync确定输入块的位置。-S--suffix .sss
压缩时使用.sss作为后缀,而不是.gz。-t--test
测试压缩输入的完整性。-U--rle
使用游程编码策略进行压缩。-v--verbose
提供更详细的输出。-V--version
显示 pigz 的版本。-vV还会显示 zlib 的版本。-z--zlib
压缩为 zlib(.zz)格式,而不是 gzip 格式。
-- 之后的所有参数都被视为文件名(适用于以 - 开头的文件名)。
这些选项是 -11 压缩级别独有的:
-F--first
在分块之前先进行迭代(默认是最后进行迭代)。-I--iterations n
优化的迭代次数(默认 15 次)。-J--maxsplits n
最大分块数量(默认 15 个)。-O--oneblock
不分割成更小的块(默认是分块)。
