10

我有一个文件,它的内容是相同的。它被传递到 gzip 中,并且只存储压缩形式。我希望能够再次生成 zip,并且只有在它们不同时才更新我的副本。就目前的差异工具(diff、xdelta、subversion)而言,文件已更改。

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

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

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

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

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

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

解决了,Bright 先生是正确的,当正确的参数是小写时,我错误地使用了大写 N。

4

3 回答 3

16

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

实际上,这恰恰相反。 -n是什么告诉它忘记原始文件名和时间戳。

于 2009-03-20T18:38:08.527 回答
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.
于 2009-03-20T18:38:31.147 回答
1

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

于 2013-04-03T10:48:41.587 回答