使用GNU GZIP环境变量被弃用后,如何通过tar控制ZLIB压缩?

18

目前我有一个脚本,使用 GZIP 环境变量来设置压缩。

在使用 gzip 1.8 时,我会收到一个警告:

warning: GZIP environment variable is deprecated; use an alias or script

如何调用tar命令来设置压缩级别?

当前命令:

GZIP=-9 tar -zcf ... 需要压缩的文件 ...


1
这可能会有所帮助:https://superuser.com/a/1091640/340330 - Cyrus
另请参阅https://www.gnu.org/software/gzip/manual/html_node/Environment.html - undefined
4个回答

29
您可以使用-I / --use-compress-program=COMMAND指定压缩程序。

因此,原始命令:

GZIP=-9 tar -zcf ... 要压缩的文件 ...

变成:

tar -I 'gzip -9' -cf ... 要压缩的文件 ...

引用自这个答案.


在 Mac 上出现“tar: Couldn't open gzip -9: No such file or directory”错误 -> "bsdtar 3.5.1 - libarchive 3.5.1 zlib/1.2.11 liblzma/5.0.5 bz2lib/1.0.8" - 还有其他人吗? - Nick Grealy
@NickGrealy -Ibsdtar中有不同的含义,但似乎--use-compress-program应该可以工作。你试过了吗? - undefined

3

取决于操作系统和附带的tar版本。如果是BSD和/或macOS,你只需执行以下操作:

tar --options gzip:compression-level=9 -czf foo.tar.gz foo.txt

否则,你可以自己掌握压缩阶段:
tar -cf - foo.txt | gzip -9 > foo.tar.gz

1
一些旧版本的tar不支持-I选项来指定压缩命令。因此,旧版本不能与类似-I 'gzip -9'的东西一起使用。 更加便携和可靠的解决方案是使用管道自己处理压缩,正如其他答案中提到的那样。

1

pigz 支持环境变量。它兼容 gzip,所以您可以使用名称 gzip 安装它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接