![使用 tar -zcvf 时如何指定压缩级别?](https://linux22.com/image/1281619/%E4%BD%BF%E7%94%A8%20tar%20-zcvf%20%E6%97%B6%E5%A6%82%E4%BD%95%E6%8C%87%E5%AE%9A%E5%8E%8B%E7%BC%A9%E7%BA%A7%E5%88%AB%EF%BC%9F.png)
我在工作中经常使用 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