2011-07-01 18:00:22 +0000 2011-07-01 18:00:22 +0000
149
149

当使用tar -zcvf时,如何指定压缩程度?

我在工作中经常gzip目录。我通常做的是

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

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

答案 (5)

69
69
69
2011-07-01 18:25:45 +0000

不使用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 的评论修正了管道命令行。

55
55
55
2012-12-19 03:03:43 +0000

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

它基于 lzma2 ,有点像 gz 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
34
34
34
2013-02-04 18:17:32 +0000
tar cv /path/to/directory | gzip --best > file.tar.gz

这是Matrix Mole的第二种解决方案,但稍有缩短。

当调用tar时,选项f表示输出是一个文件。将其设置为-(stdout),使得tar将其输出写到stdout,这是默认的行为,没有f-

就像gzip手册页所说的,如果没有指定文件,gzip将从标准输入中压缩。在-调用中不需要gzip

选项--best(相当于-9)设置最高压缩级别。

10
10
10
2016-06-21 04:21:54 +0000

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

tar -I 'gzip -9' -cvf file.tar.gz /path/to/directory
3
3
3
2019-01-19 16:26:40 +0000

当然,macOS bsd衍生的tar也要不同:

tar -czf file.tar.gz --options gzip:compression-level=9 /path/to/directory
```。