2009-03-20 12 views
8

Ich habe eine Datei, deren Inhalt identisch ist. Es wird in gzip übergeben und nur das komprimierte Formular wird gespeichert. Ich möchte in der Lage sein, die Zip erneut zu generieren, und meine Kopie nur aktualisieren, sollten sie sich unterscheiden. Wie es aussieht Diffing Tools (Diff, Xdelta, Subversion) sehen die Dateien als verändert.Wie erstelle ich ein identisches gzip der gleichen Datei?

Prämisse, ich speichere eine mysqldump einer wichtigen Datenbank in ein Subversion-Repository. Es ist meine Absicht, dass ein Cronjob die db regelmäßig ablegt, gzip und die Datei festschreibt. Derzeit wird jedes Mal, wenn die Datei gedumpt und dann gezippt wird, dies als abweichend betrachtet. Ich würde es vorziehen, wenn meine Revisionsnummern nicht alle 15 Minuten unnötig zunehmen würden.

Ich weiß, ich könnte die Datei als einfachen Text, aber ich würde lieber nicht, da es ziemlich groß ist.

Der Befehl, den ich zur Zeit die Deponien erzeugen bin mit ist:

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

Die -n gzip weisen die Dateinamen/Zeitinformationen zu entfernen. Die sed '$d' entfernt die letzte Zeile der Datei, in der mysqldump einen Zeitstempel platziert.

An diesem Punkt werde ich wahrscheinlich wieder auf das Speichern im Klartext Mode, aber ich war neugierig, welche Art von Lösung gibt es.

Gelöst, Mr. Bright was correct, hatte ich irrtümlicherweise eine Groß-N verwendet, wenn das richtige Argument ein Kleinbuchstabe war.

Antwort

12

-N anweist gzip den name/Zeitstempel-Information zu entfernen.

Eigentlich macht das genau das Gegenteil. -n ist, was es sagt, den ursprünglichen Dateinamen und den Zeitstempel zu vergessen.

+0

Immer etwas verdammt dumm. Seufzer. Vielen Dank für den Hinweis auf den dummen Fehler. – Danny

3

Ich denke, Gzip behält das ursprüngliche Datum und Zeitstempel auf die Datei (en), die dazu führen wird, dass es ein anderes Archiv erzeugt.

-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. 
1

Aber Vorsicht: zwei gzips zu verschiedenen Zeiten der gleichen unveränderten Datei gemacht unterscheiden sich. Der Grund dafür ist, dass das gzip selbst mit dem gzip-Erstellungsdatum mit Zeitstempel versehen ist - dies wird in den Header der gzip-Datei geschrieben. So können die scheinbar unterschiedlichen Gzips genau denselben Inhalt enthalten.