Muszę codziennie tworzyć kopie zapasowe danych i plików konfiguracyjnych na tym serwerze. Muszę zachować:
- codzienne kopie zapasowe przez tydzień
- cotygodniowe kopie zapasowe przez miesiąc
- miesięczne kopie zapasowe przez rok
- następnie roczne kopie zapasowe
Wszystko to osiągnięto poprzez skrypt powłoki uruchamiany codziennie z crona.
Tak powinny wyglądać pliki kopii zapasowej po 10 latach działania:
blog-20050103.tar.bz2
blog-20060102.tar.bz2
blog-20070101.tar.bz2
blog-20080107.tar.bz2
blog-20090105.tar.bz2
blog-20100104.tar.bz2
blog-20110103.tar.bz2
blog-20120102.tar.bz2
blog-20130107.tar.bz2
blog-20130902.tar.bz2
blog-20131007.tar.bz2
blog-20131104.tar.bz2
blog-20131202.tar.bz2
blog-20140106.tar.bz2
blog-20140203.tar.bz2
blog-20140303.tar.bz2
blog-20140407.tar.bz2
blog-20140505.tar.bz2
blog-20140602.tar.bz2
blog-20140707.tar.bz2
blog-20140728.tar.bz2
blog-20140804.tar.bz2
blog-20140811.tar.bz2
blog-20140816.tar.bz2
blog-20140817.tar.bz2
blog-20140818.tar.bz2
blog-20140819.tar.bz2
blog-20140820.tar.bz2
blog-20140821.tar.bz2
blog-20140822.tar.bz2
Odpowiedzi:
Poważnie nadużywacie tego. Źle.
Oto pseudokod:
daily
katalogudaily
kopii zapasowychweekly
kataloguweekly
kopii zapasowychmonthly
katalogumonthly
kopii zapasowychyearly
kataloguIlość logiki, którą musisz zastosować, jest prawie taka sama, co? POCAŁUNEK.
Wygląda to łatwiej:
Lub według liczby plików zamiast wieku:
źródło
Jeśli chcesz na przykład przechowywać 8 codziennych kopii zapasowych i 5 tygodniowych (w każdą niedzielę) kopii zapasowych, działa to tak:
Na dzień dzisiejszy (10.11.2014) spowoduje to:
Jako ćwiczenie pozostawiasz do usunięcia, po prostu musisz usunąć wszystkie pliki kopii zapasowych, których nazwy nie pojawiają się w
keep
-array.Jeśli chcesz zachować 13 miesięcznych kopii zapasowych (pierwsza niedziela każdego miesiąca) i 6 rocznych kopii zapasowych (pierwsza niedziela każdego roku), sprawy stają się nieco bardziej skomplikowane:
Na dzień dzisiejszy (10.11.2014) spowoduje to:
Tak jak powyżej, po prostu usuń wszystkie pliki kopii zapasowej, których nie ma w tej tablicy.
źródło
rm /dir/*.* except keep[@]
?Jak wspomniano w komentarzu, zwykle najlepiej jest przekazać zadanie zarządzania kopiami zapasowymi oprogramowaniu do zarządzania kopiami zapasowymi.
Ale oto logika w bash do usuwania starszych kopii zapasowych zgodnie z wymaganiami
Kod PHP pokazujący, które pliki pozostaną po uruchomieniu przez 3520 dni
https://ideone.com/n2ymQy
źródło