3

我制作了我的文件夹的两个压缩副本,首先使用命令tar czf dir.tar.gz dir 这给了我一个大小约为 16kb 的存档。然后我尝试了另一种方法,首先我将目录中的所有文件压缩然后使用

gzip ./dir/*
tar cf dir.tar dir/*.gz

但第二种方法给了我大小约为 30kb 的 dir.tar(几乎是两倍)。为什么大小差别这么大?

4

3 回答 3

8

因为 zip 过程通常在大样本上比在小文件上更有效。例如,您已经压缩了 100 个 1ko 文件。每个文件都会有一定的压缩,加上gzip 格式的开销

file1.tar -> files1.tar.gz  (admit 30 bytes of headers/footers)
file2.tar -> files2.tar.gz  (admit 30 bytes of headers/footers)
...
file100.tar -> files100.tar.gz  (admit 30 bytes of headers/footers)
------------------------------
30*100 = 3ko of overhead.

但是如果你尝试压缩一个tar100ko 的文件(包含你的 100 个文件),gzip 格式的开销只会增加一次(而不是 100 次),压缩效果会更好)

于 2014-02-12T19:15:44.427 回答
3

每个文件元数据和次优压缩的开销,gzip当单独处理文件时,由于gzip未完整观察数据并因此使用次优字典进行压缩(在每个文件后重置)。

于 2014-02-12T19:15:25.167 回答
-3

tar cf应该创建一个未压缩的存档,这意味着您的目录的大小应该与您的存档几乎相同,甚至可能更大。

tar czfgunzip通过它进行压缩。

这可以通过man tar在 Linux 中执行 in shell 提示来进一步检查,

   -z, --gzip, --gunzip, --ungzip
          filter the archive through gzip
于 2014-02-12T19:14:04.167 回答