常用方法
tar 程序有选项:
-I, --use-compress-program PROG
filter through PROG (must accept -d)
您可以使用多线程版本的归档器或压缩器实用程序。
最流行的多线程存档器是pigz(而不是 gzip)和pbzip2(而不是 bzip2)。例如:
$ tar -I pbzip2 -cf OUTPUT_FILE.tar.bz2 paths_to_archive
$ tar --use-compress-program=pigz -cf OUTPUT_FILE.tar.gz paths_to_archive
归档器必须接受 -d。如果您的替换实用程序没有此参数和/或您需要指定其他参数,则使用管道(必要时添加参数):
$ tar cf - paths_to_archive | pbzip2 > OUTPUT_FILE.tar.gz
$ tar cf - paths_to_archive | pigz > OUTPUT_FILE.tar.gz
单线程和多线程的输入输出兼容。您可以使用多线程版本进行压缩,使用单线程版本进行解压,反之亦然。
p7zip
对于用于压缩的 p7zip,您需要如下所示的小型 shell 脚本:
#!/bin/sh
case $1 in
-d) 7za -txz -si -so e;;
*) 7za -txz -si -so a .;;
esac 2>/dev/null
另存为 7zhelper.sh。这里是使用示例:
$ tar -I 7zhelper.sh -cf OUTPUT_FILE.tar.7z paths_to_archive
$ tar -I 7zhelper.sh -xf OUTPUT_FILE.tar.7z
xz
关于多线程 XZ 支持。如果您运行的是 XZ Utils 5.2.0 或更高版本,您可以通过环境变量 XZ_DEFAULTS(例如 XZ_DEFAULTS="-T 0")将 -T 或 --threads 设置为适当的值来利用多个内核进行压缩。
这是 5.1.0alpha 版本的 man 片段:
多线程压缩和解压还没有实现,所以这个
选项暂时无效。
但是,这不适用于解压缩尚未解压的文件
在启用线程的情况下进行压缩。来自 5.2.2 版的 man:
尚未实现线程解压。它只会工作
在包含多个具有大小信息的块的文件上
块头。多线程模式下压缩的所有文件都满足这个
条件,但以单线程模式压缩的文件即使
使用 --block-size=size。
用替换重新编译
如果你从源代码构建 tar,那么你可以使用参数重新编译
--with-gzip=pigz
--with-bzip2=lbzip2
--with-lzip=plzip
使用这些选项重新编译 tar 后,您可以查看 tar 帮助的输出:
$ tar --help | grep "lbzip2\|plzip\|pigz"
-j, --bzip2 filter the archive through lbzip2
--lzip filter the archive through plzip
-z, --gzip, --gunzip, --ungzip filter the archive through pigz