2009-03-20 13 views
8

Tengo un archivo, su contenido es idéntico. Se pasa a gzip y solo se almacena la forma comprimida. Me gustaría poder generar el zip nuevamente y solo actualizar mi copia si difieren. Tal como se encuentra las herramientas que difieren (diff, xdelta, subversion) ven los archivos como si hubieran cambiado.¿Cómo crear un gzip idéntico del mismo archivo?

Premisa, estoy almacenando un mysqldump de una base de datos importante en un repositorio de subversión. Tengo la intención de que un cronjob descargue periódicamente el archivo db, gzip y confirme el archivo. Actualmente, cada vez que se descarga el archivo y luego se descomprime, se considera que difiere. Prefiero que mis números de revisión no aumenten innecesariamente cada 15 m.

Me doy cuenta de que podría volcar el archivo como texto simple, pero preferiría no porque es bastante grande.

El comando actualmente estoy usando para generar los vertederos es:

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

El -n instruye gzip para eliminar la información de nombre de archivo/marca de tiempo. El sed '$d' elimina la última línea del archivo donde mysqldump coloca una marca de tiempo.

En este punto, probablemente voy a volver a almacenarlo en un texto sin formato, pero tenía curiosidad sobre qué tipo de solución hay.

Resuelto, Mr. Bright was correct, había utilizado erróneamente una N mayúscula cuando el argumento correcto era minúsculo.

Respuesta

12

El -N instruye gzip para eliminar el nombre de archivo/información de marca de tiempo.

En realidad, eso hace todo lo contrario. -n es lo que le dice que olvide el nombre del archivo original y la marca de tiempo.

+0

Siempre algo maldito estúpido. suspiro. Gracias por señalar el error tonto. – Danny

3

Creo que gzip conserva la fecha original y la marca de tiempo en el archivo (s) lo que hará que produzca un archivo diferente.

-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

Pero cuidado: dos gzips hechos en diferentes momentos del mismo archivo sin modificar son diferentes. Esto se debe a que el gzip tiene una marca de tiempo con la fecha de creación de gzip; esto se escribe en el encabezado del archivo gzip. Por lo tanto, los gzips aparentemente diferentes pueden contener el mismo contenido exacto.

Cuestiones relacionadas