Mar*_*tto 86 compression command-line gzip tar
我理解使用 tar + gzip 的方式tar是通常用于将一组文件合并为一个文件,然后gzip用于压缩该文件。
我最近了解到,tar也可以压缩。
因为我不完全理解压缩是如何工作的@它的核心,我有(可能是荒谬的)担心将预压缩的 .tar 发送到 gzip 可能会阻止 gzip 压缩以及它的潜力允许和这种性质的事情。
我的问题本质上是:我应该使用什么参数/压缩方法的组合来创建绝对最小的 tar.gz,命令行语句是什么样的?
小智 144
或者,您可以通过以下方式将 tar 告知用户最大压缩:
export GZIP=-9
tar cvzf file.tar.gz /path/to/directory
Run Code Online (Sandbox Code Playgroud)
此外,为了让您的 envvars 保持整洁,您可以这样做:
env GZIP=-9 tar cvzf file.tar.gz /path/to/directory
Run Code Online (Sandbox Code Playgroud)
Ujj*_*ngh 57
正如您所说- “ tar 也可以压缩”,这意味着-tar并不总是自行压缩数据。它仅在与z选项一起使用时才这样做。这也不是靠它自己,而是通过 gzip 传递 tarred 数据。
但是,正如本答案中所述,您可以通过管道传输两个命令:tar&gzip以便您可以明确指定gzip命令的压缩级别以实现最小的输出大小。
tar cvf - /path/to/directory | gzip -9 - > file.tar.gz
Run Code Online (Sandbox Code Playgroud)
这里9指定了最大可能的压缩级别。
gma*_*tht 21
通常 gzip 和 tar 都不能创建“绝对最小的 tar.gz”。有许多压缩实用程序可以压缩为 gz 格式。我写了一个bash脚本“ gz99 ”尝试gzip,7z并advdef获得最小的文件。要使用它来创建尽可能小的文件,请运行:
tar c path/to/data | gz99 file.gz
Run Code Online (Sandbox Code Playgroud)
advdefAdvanceCOMP的实用程序通常提供最小的文件,但也有问题(该gz99实用程序在接受 的输出之前会检查它是否没有损坏文件advdef)。要advdef直接使用,请根据需要创建 file.tar.gz。然后运行:
advdef -z -4 file.tar.gz
Run Code Online (Sandbox Code Playgroud)
这将创建一个标准的 gz 文件,gzip 和 tar 可以正常读取它,只是小一点。这是您使用 gz 格式所能达到的最佳效果。
由于您最近才知道 tar 可以压缩,并且没有说明为什么您想要最小的“.tar.gz”文件,您可能不知道有更有效的格式可以用于 tar 文件,例如 xz。通常,与摆弄 gzip 选项相比,切换到不同的格式可以在压缩方面提供更好的改进。xz 的主要缺点是它不像 gzip 那样常见,因此您将文件发送给的人可能必须安装一个新包。它也往往有点慢,特别是在压缩时。如果这对您来说无关紧要,并且您确实想要最小的 tar 文件,请尝试:
tar cv path/to/data | xz -9 > file.tar.xz
Run Code Online (Sandbox Code Playgroud)
现代版本的 tar,例如在 Ubuntu 13.10 上,会自动检测压缩文件。因此,即使您使用 xz 压缩,您仍然可以像往常一样解压缩:
tar xvf file.tar.xz
Run Code Online (Sandbox Code Playgroud)
为了快速了解这些压缩实用程序的比较,请考虑从 linux 内核压缩 patch-3.1.1 的效果:
utility cpu format size(bytes)
gzip -9 0.02s gz 105,628
advdef -2 0.07s gz 102,619
7z -mx=9 -tgzip 0.42s gz 102,297
advdef -3 0.55s gz 102,290
advdef -4 0.75s gz 101,956
xz -9 0.03s xz 91,064
xz -3e 0.15s xz 90,996
Run Code Online (Sandbox Code Playgroud)
在这个简单的例子中,我们看到为了获得最小的 gz,我们需要 advdef(尽管 7z -tgzip 几乎一样好,而且错误少得多)。我们还看到,切换到 xz 比尝试从旧的 gz 格式中榨取最多的空间获得了更多的空间,而且压缩时间不会太长。
car*_*ito 11
tar c /path/to/data | gzip --best > file.tar.gz
Run Code Online (Sandbox Code Playgroud)
gzip选项--best(相当于-9)要求最高压缩级别。