让我们通过一个示例来确认您所看到的内容。
在这里,我有一个目录x
,其中包含两个文件。
# ls -l x
total 12
-rw-r--r-- 1 root root 3902 Jan 30 17:00 log1.txt
-rw-r--r-- 1 root root 7518 Jan 30 17:00 log.txt
压缩文件
# gzip -9v x/*
x/log1.txt: 90.6% -- replaced with x/log1.txt.gz
x/log.txt: 84.5% -- replaced with x/log.txt.gz
确认压缩有效
# ls -l x
total 8
-rw-r--r-- 1 root root 392 Jan 30 17:00 log1.txt.gz
-rw-r--r-- 1 root root 1195 Jan 30 17:00 log.txt.gz
将文件放入tar, x.tar
# tar cvf x.tar x
x/
x/log1.txt.gz
x/log.txt.gz
并检查结果大小。我也10240
一样
# ls -l x.tar
-rw-r--r-- 1 root root 10240 Jan 31 09:02 x.tar
原因很简单-tar格式以固定的块大小工作,因此NULL字节将有很多填充。详细信息请参见此处。对于像这样的小文件,这些填充字节将占主导地位。如果查看此tar文件的十六进制转储,则其中大多数为NULL填充字节。
这就是为什么最好将文件的未压缩版本放入tar,然后对其进行压缩。
这是一个例子。
将未压缩的文件放入 x.tar
# ls -l x
total 12
-rw-r--r-- 1 root root 3902 Jan 30 17:00 log1.txt
-rw-r--r-- 1 root root 7518 Jan 30 17:00 log.txt
# tar cvf x.tar x
x/
x/log1.txt
x/log.txt
# ls -l x.tar
-rw-r--r-- 1 root root 20480 Jan 31 09:06 x.tar
现在压缩tar文件。1761
字节要好得多。
# gzip -9v x.tar
x.tar: 91.7% -- replaced with x.tar.gz
# ls -l x.tar.gz
-rw-r--r-- 1 root root 1761 Jan 31 09:06 x.tar.gz
“这就是为什么最好将文件的未压缩版本放入tar,然后对其进行压缩。” 我一直想知道为什么,但是现在我知道了。谢谢!