Мне нужно резервировать данные и файлы конфигурации на этом сервере ежедневно. Мне нужно сохранить:
- ежедневные резервные копии на неделю
- еженедельные резервные копии на месяц
- ежемесячные резервные копии на год
- ежегодные резервные копии после этого
Все это выполняется через скрипт оболочки, запускаемый ежедневно из cron.
Вот как должны выглядеть файлы резервных копий после 10 лет работы:
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
Ответы:
Вы серьезно перегружаете это. Плохо.
Вот какой-то псевдокод:
daily
каталогdaily
резервных копийweekly
каталогweekly
резервных копийmonthly
каталогmonthly
резервных копийyearly
каталогКоличество логики, которую вы должны реализовать, примерно одинаково, а? ПОЦЕЛУЙ.
Это выглядит проще:
Или по количеству файлов вместо возраста:
источник
Если вы просто хотите сохранить, например, 8 ежедневных резервных копий и 5 еженедельных (каждое воскресенье), это работает следующим образом:
На сегодняшний день (2014-11-10), это будет выводить:
В качестве упражнения, оставленного для вас, вам просто нужно удалить все файлы резервных копий, имена которых не отображаются в
keep
массиве -ar.Если вы хотите хранить 13 ежемесячных резервных копий (первое воскресенье каждого месяца) и 6 ежегодных резервных копий (первое воскресенье каждого года), то все становится немного сложнее:
На сегодняшний день (2014-11-10), это будет выводить:
Как и выше, просто удалите все файлы резервных копий, не найденные в этом массиве.
источник
rm /dir/*.* except keep[@]
?Как упомянуто в комментарии, как правило, лучше всего делегировать задачу управления резервными копиями программному обеспечению для управления резервным копированием.
Но вот логика в Bash для удаления старых резервных копий в соответствии с вашим требованием
PHP-код, показывающий, какие файлы останутся после запуска в течение 3520 дней
https://ideone.com/n2ymQy
источник