使用 tar -zcvf 时如何指定压缩级别?

使用 tar -zcvf 时如何指定压缩级别?

我在工作中经常使用 gzip 压缩目录。我通常的做法是

tar -zcvf file.tar.gz /path/to/directory

有没有办法在这里指定压缩级别?我想使用尽可能最好的压缩,即使压缩需要更多时间。

答案1

GZIP=-9 tar cvzf file.tar.gz /path/to/directory

假设你正在使用 bash。通常,设置GZIP环境变量改为“-9”,然后正常运行 tar。

另外 - 如果您确实想要最佳压缩,请不要使用 gzip。使用 lzma 或 7z。

当使用 gzip 时(出于各种原因这都是一个好主意)请考虑使用pigz程序而不是gzip

答案2

不要使用 tar 的 gzip 标志,而是在 tar 过程之后手动对文件进行 gzip 压缩,然后可以为 gzip 程序指定压缩级别:

tar -cvf files.tar /path/to/file0 /path/to/file1 ; gzip -9 files.tar

或者你可以使用:

tar cvf - /path/to/file0 /path/to/file1 | gzip -9 - > files.tar.gz

gzip 命令行中的 -9 告诉 gzip 使用最大可能的压缩级别(默认为 -6)。

编辑:根据@depesz 注释修复管道命令行。

答案3

现代版本的 tar 支持 xz 存档格式(GNU tar,自 1.22 起2009 年,Busybox自 1.17.0 起在2010年)。

它基于lzma2,有点像7-Zip版本的广州。如果您同意需要 xz 支持的要求,这将提供更好的压缩。

tar -Jcvf file.tar.xz /path/to/directory

我刚刚发现这里(基本上是这个问题的重复,但在 Unix stackexchange 中)还有一个 XZ_OPT=-9 环境变量来控制 XZ 压缩级别,类似于另一篇文章中的 GZIP 级别。

XZ_OPT=-9 tar -Jcvf file.tar.xz /path/to/directory

答案4

还可以使用 指定压缩程序的选项-I。这可以包括压缩级别选项。

tar -I 'gzip -9' -cvf file.tar.gz /path/to/directory

请注意,该-I选项是 的简写--use-compress-program=COMMAND。如果您不使用GNUtar北达科他州tar后者用-Ioption 作为--files-from filenameoption 的简写。

因此,为了使您的命令“跨平台”,您可以这样写:

tar --use-compress-program='gzip -9' -cvf file.tar.gz /path/to/directory

相关内容