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
将压缩块大小设置为mmm
K(默认 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
不分割成更小的块(默认是分块)。