2009-03-20 4 views
8

Ho un file, il suo contenuto è identico. Viene passato in gzip e viene memorizzato solo il modulo compresso. Mi piacerebbe essere in grado di generare di nuovo lo zip e aggiornare la mia copia solo se differiscono. Così come gli strumenti diff (diff, xdelta, subversion) vedono i file come modificati.Come creare un gzip identico dello stesso file?

Premessa, sto memorizzando un mysqldump di un database importante in un repository di subversion. È mia intenzione che un cronjob scarichi periodicamente il db, lo gzip e impegni il file. Attualmente, ogni volta che il file viene scaricato e quindi gzip viene considerato diverso. Preferirei che i numeri di revisione non aumentassero inutilmente ogni 15 m.

Mi rendo conto che è possibile eseguire il dump del file semplicemente come testo normale, ma preferirei che non sia piuttosto grande.

Il comando Attualmente sto usando per generare le discariche è:

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

Il -n istruisce gzip per rimuovere le informazioni nome/timestamp. Lo sed '$d' rimuove l'ultima riga del file in cui mysqldump inserisce un timestamp.

A questo punto, probabilmente tornerò a memorizzarlo in modo semplice, ma ero curioso di sapere quale tipo di soluzione ci sia.

Risolto, Mr. Bright was correct, ho erroneamente utilizzato una maiuscola N quando l'argomento corretto era minuscolo.

risposta

12

Il -N indica gzip per rimuovere il nome/informazioni timestamp.

In realtà, questo fa esattamente l'opposto. -n è ciò che dice di dimenticare il nome del file originale e il timestamp.

+0

Sempre qualcosa di stupido. Sigh. Grazie per aver segnalato l'errore stupido. – Danny

3

Penso che gzip stia conservando la data e il timestamp originali sui file che causeranno la produzione di un archivio diverso.

-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

Ma attenzione: due gzip realizzati in momenti diversi dello stesso file non modificato differiscono. Questo perché gzip è esso stesso temporizzato con la data di creazione gzip - questo è scritto nell'intestazione del file gzip. Quindi i gzip apparentemente diversi possono contenere esattamente lo stesso contenuto.