如何创建与同一文件相同的gzip压缩文件?

11
我有一个文件,它们的内容是相同的。将其传入gzip中,只存储压缩形式。我希望能够再次生成zip文件,并且仅在它们不同时更新我的副本。目前,diff工具(diff、xdelta、subversion)认为这些文件已经发生了更改。
前提是,我正在将重要数据库的mysqldump存储到子版本库中。我的意图是定期使用cronjob转储数据库,gzip它并提交该文件。目前,每次转储并压缩文件时,都会被视为不同。我不想每15分钟就需要增加版本号。
我知道我可以将文件转储为纯文本,但我不想这样做,因为它非常大。
我目前使用的命令来生成转储是:
mysqldump $DB --skip-extended-insert | sed '$d' | gzip -n > $REPO/$DB.sql.gz

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

此时,我可能会回到以纯文本形式存储的方式,但我很好奇有什么解决方案。

问题已解决, Bright先生是正确的, 我错误地使用了大写字母"N",而正确的参数应该是小写字母。

3个回答

16
-N指示gzip保留文件名和时间戳信息,实际上它恰好相反。 -n是告诉gzip忘记原始文件名和时间戳的选项。

总是有些讨厌的愚蠢错误。 叹气。 感谢您指出这个愚蠢的错误。 - Danny

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接