如何创建相同文件的相同gzip?

时间:2009-03-20 18:32:52

标签: version-control binary compression diff mysqldump

我有一个文件,其内容相同。它被传递给gzip,只存储压缩格式。我希望能够再次生成zip,并且只有在它们不同时才更新我的副本。因为它代表了差异工具(diff,xdelta,subversion),所以看到文件已经改变了。

前提是,我将一个重要数据库的mysqldump存储到一个subversion存储库中。我的意图是cronjob定期转储db,gzip,然后提交文件。目前,每次转储文件然后gzip压缩它都被认为是不同的。我宁愿不让我的修订号每15米不必要地增加。

我意识到我可以将文件转储为纯文本,但我不喜欢它,因为它相当大。

我目前用于生成转储的命令是:

mysqldump $DB --skip-extended-insert | sed '$d' | gzip -n > $REPO/$DB.sql.gz

-n指示gzip删除文件名/时间戳信息。 sed '$d'删除mysqldump放置时间戳的文件的最后一行。

此时,我可能会恢复以纯文本方式存储它,但我很好奇它有什么样的解决方案。

已解决,Mr. Bright was correct,当正确的参数为小写时,我错误地使用了大写字母N。

3 个答案:

答案 0 :(得分:14)

  

-N指示gzip删除   文件名/时间戳信息。

实际上,情况正好相反。 -n告诉它忘记原始文件名和时间戳。

答案 1 :(得分:3)

我认为gzip会保留文件的原始日期和时间戳,这会导致它生成不同的档案。

-N --name
          When  compressing,  always  save  the original file
          name and time stamp;  this  is  the  default.  When
          decompressing,  restore  the original file name and
          time stamp if present. This  option  is  useful  on
          systems  which  have a limit on file name length or
          when the time stamp has  been  lost  after  a  file
          transfer.

答案 2 :(得分:1)

但是注意:在同一个未更改文件的不同时间制作的两个gzips不同。这是因为gzip本身用gzip创建日期加上时间戳 - 这被写入gzip文件的头部。因此,明显不同的gzips可以包含完全相同的内容。