多核服务器压缩文件脚本,利用多核进行tar + gzip / bzip压缩/解压缩

时间:2024-10-29 13:44:31

常用方法

-T程序有选项:

-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. paths_to_archive

Archiver必须接受-d。 如果替换实用程序没有此参数和/或您需要指定其他参数,则使用管道(如有必要,添加参数):

$ tar cf - paths_to_archive | pbzip2 > OUTPUT_FILE.

$ tar cf - paths_to_archive | pigz > OUTPUT_FILE.

单线程和多线程的输入和输出是兼容的。 您可以使用多线程版本进行压缩,并使用单线程版本进行解压缩,反之亦然。

的p7zip

对于压缩的p7zip,您需要一个小的shell脚本,如下所示:

#!/bin/sh

case $1 in

-d) 7za -txz -si -so e;;

*) 7za -txz -si -so a .;;

esac 2>/dev/null

保存为。 这里的用法示例如下:

$ tar -I -cf OUTPUT_FILE.tar.7z paths_to_archive

$ tar -I -xf OUTPUT_FILE.tar.7z

XZ

关于多线程XZ支持。 如果您运行的是XZ Utils的5.2.0或更高版本,则可以通过环境变量XZ_DEFAULTS(例如XZ_DEFAULTS="-T 0")将-T或--threads设置为适当的值来利用多个内核进行压缩。

这是5.1.0alpha版本的一个人的片段:

多线程压缩和解压缩尚未实现,所以这一点   选项现在没有效果。

但是,这对于没有的文件的解压缩也不起作用已启用线程压缩。 从版本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