2009-03-20 18 views
8

Mam plik, jego zawartość jest identyczna. Jest on przekazywany do gzip i zapisywany jest tylko skompresowany formularz. Chciałbym móc ponownie wygenerować plik ZIP i aktualizować tylko jego kopię, jeśli się różnią. W przeciwieństwie do innych narzędzi diffing (diff, xdelta, subversion) zobacz pliki jako zmienione.Jak utworzyć identyczny plik gzip z tego samego pliku?

Premierze, przechowuję mysqldump z ważnej bazy danych do repozytorium subversion. Moim zamiarem jest, aby cronjob okresowo zrzucał db, zapisywał go gzip i zatwierdzał plik. Obecnie za każdym razem, gdy plik jest porzucany, a następnie gzipowany, jest uważany za inny. Wolałbym nie zwiększać liczby rewizji co 15m.

Rozumiem, że mogę zrzucić plik jako zwykły tekst, ale wolałbym nie, ponieważ jest dość duży.

Komenda Obecnie używam do generowania zrzutów to:

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

-n instruuje gzip, aby usunąć informacje filename/datownika. sed '$d' usuwa ostatni wiersz pliku, w którym mysqldump umieszcza znacznik czasu.

W tym momencie prawdopodobnie powrócę do przechowywania w zwykły tekst, ale byłem ciekawy, jaki rodzaj rozwiązania istnieje.

Rozwiązany, Mr. Bright was correct, błędnie użyłem kapitału N, gdy poprawny argument był mały.

Odpowiedz

12

-N instruuje gzip usunąć nazwy pliku/informacje znacznika czasu.

W rzeczywistości jest dokładnie odwrotnie. -n jest tym, co mówi, aby zapomnieć o oryginalnej nazwie pliku i sygnaturze czasowej.

+0

Zawsze coś głupiego głupiego. Westchnienie. Dziękuję za wskazanie głupiego błędu. – Danny

3

Myślę, że gzip zachowuje oryginalną datę i znacznik czasu w pliku (plikach), co spowoduje, że wygeneruje inne archiwum.

-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

Ale watchout: dwa kompresuje wykonane w różnych porach tego samego pliku niezmienionej cenie. Dzieje się tak dlatego, że gzip jest czasem oznaczony datą utworzenia gzip - jest to zapisane w nagłówku pliku gzip. W ten sposób pozornie różne gzipy mogą zawierać dokładnie taką samą treść.