2009-03-20 6 views
8

J'ai un fichier, son contenu est identique. Il est passé dans gzip et seule la forme compressée est stockée. J'aimerais pouvoir générer à nouveau le fichier zip, et ne mettre à jour ma copie que s'ils diffèrent. Comme il existe différents outils (diff, xdelta, subversion) voir les fichiers comme ayant changé.Comment créer un gzip identique du même fichier?

Prémisse, je stocke un mysqldump d'une base de données importante dans un dépôt Subversion. C'est mon intention qu'un cronjob vider périodiquement le DB, le gzip, et commette le dossier. Actuellement, chaque fois que le fichier est sauvegardé et gzippé, il est considéré comme différent. Je préférerais ne pas avoir mes numéros de révision inutilement augmenter tous les 15m.

Je me rends compte que je pourrais vider le fichier en texte brut, mais je préférerais pas, car il est plutôt grand.

La commande J'utilise actuellement pour générer les décharges est:

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

Le -n indique à gzip pour supprimer les informations nom/horodatage. Le sed '$d' supprime la dernière ligne du fichier où mysqldump place un horodatage.

À ce stade, je vais probablement revenir au stockage en mode texte, mais j'étais curieux de savoir quelle sorte de solution il y a.

Résolu, Mr. Bright was correct, j'avais utilisé par erreur un N majuscule lorsque l'argument correct était en minuscule.

Répondre

12

Le -N charge gzip pour supprimer le nom de fichier /informations d'horodatage.

En fait, cela fait exactement le contraire. -n est ce qui lui dit d'oublier le nom de fichier d'origine et l'horodatage.

+0

Toujours quelque chose de stupide stupide. Soupir. Merci d'avoir signalé cette erreur idiote. – Danny

3

Je pense que gzip préserve la date et l'horodatage d'origine sur le (s) fichier (s), ce qui va le conduire à produire une archive différente.

-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

Mais attention: deux gzips créés à différents moments du même fichier inchangé diffèrent. C'est parce que le gzip est lui-même horodaté avec la date de création de gzip - ceci est écrit dans l'en-tête du fichier gzip. Ainsi, les gzips apparemment différents peuvent contenir exactement le même contenu.

Questions connexes