为什么我要压缩单个文件?

为什么我要压缩单个文件?

在我的公司,我们将本地开发数据库快照下载为db.dump.tar.gz文件。压缩是有意义的,但 tarball 只包含一个文件 ( db.dump)。

归档单个文件有什么意义,或者.tar.gz只是这样一个常见的习惯用法?为什么不只是.gz

答案1

.tar.gz使用代替的优点.gz

  • tar比 . 存储更多的元数据(UNIX 权限等)gzip
  • 该设置可以更轻松地扩展以存储多个文件
  • .tar.gz 文件很常见,仅压缩文件可能会让一些用户感到困惑。 (参见 梅尔布尔斯兰评论

使用的开销tar也很小。

如果不是真的需要,我仍然不建议 tar 单个文件。有许多有用的工具可以直接访问压缩的单个文件(例如zcatzgrep- 也存在bzip2xz)。

答案2

你实际上只问了一半的问题。另一个问题是,“为什么我要用 gzip 压缩 tar 文件?”。答案不仅仅是gzip使文件变小(在大多数情况下):

tar:

  • 存储文件名和其他元数据:模式、所有者 ID、组 ID、文件大小、修改时间
  • 存储校验和(仅适用于标头)

gzip

  • 可以存储原始文件名,但这是可选的
  • 对原始数据进行 CRC-32 校验和
  • 它压缩文件

只有tar你不能确定你的数据没有被损坏。仅gzip您无法恢复用户/组 ID、修改时间,并且可能不是原始文件名。

该组合比单个命令/格式提供的功能更强大,因为它们的功能互补

答案3

仅使用 gzip 压缩的文本文件有一个相当大的优势 - 可以使用lesszgrep、等命令行工具直接访问内容zcat

答案4

在某些情况下,有一个重要的区别可能会使 using 变得tar重要:除了 @jofel 在他的回答中提到的“元数据”之外,tar 记录文件名在档案中。当你提取它时,你得到原始文件名无论存档的名称是什么。

在您的情况下,tar 存档及其包含的文件具有相关名称db.dump.tar.gzdb.tar,但假设您将 tar 文件重命名为20-Apr-16.dump.tgz,或其他名称。解压这个tar xvfz,你就得到了db.dump。为了比较,解压20-Apr-16.dump.gz后你就得到了20-Apr-16.dump. (编辑:正如评论中指出的,gzip 还会记录文件名;但解压缩时通常不使用它)。存档tar还可以包含将提取的文件放入子目录中的相对路径名。

您的用例将决定是否需要这种文件名持久性,甚至通缉,或者实际上是不可取的。但可以肯定的是,无论压缩如何,tar存档的传输方式都与常规文件不同。

相关内容