Я не совсем уверен, как это сделать, из-за незнания оболочки.
NOW=$(date +"%Y.%m.%d.%T")
tar czf /backups/web_backup_$NOW.tgz /web/
Не могли бы вы помочь мне удалить старые резервные копии, чтобы в них остались только:
Посмотрите на rsnapshot. Он может делать то, что вы хотите, из коробки.
Если вы в первую очередь используете rsnapshot, он выполняет надлежащее хранение резервных копий на лету (он создает для вас структуру ежечасных, ежедневных, еженедельных и т. Д.).
Если вы не создаете снимки с помощью rsnapshot или у вас уже есть достаточно большой набор снимков, и вы хотите сократить его ретроспективу, взгляните на промежутки времени. Он разработан именно для этого варианта использования (простая реализация политик хранения резервных копий). В соответствии с вашим вариантом использования вы можете вызывать такие временные интервалы:
$ timegaps days3,weeks3,months3 *.tgz
Затем он идентифицирует те файлы tgz, которые необходимо отклонить (на основе времени модификации файла), и записывает их в стандартный вывод для просмотра или дальнейшей обработки (неинвазивный режим только для чтения). Временные интервалы также могут --move
эти файлы или напрямую или --delete
их. При необходимости он может анализировать время создания элемента по имени файла (см. Справочное сообщение) вместо того, чтобы получать его через stat()
.
Отказ от ответственности: я являюсь автором временных интервалов.
что-то вроде этого: (просто идея)
mkdir -p monthly
mkdir -p weekly
ln backup_$NOW.tgz weekly/
# find current month
month=$(date +%Y-%m-)
# find the first file of the current month in the weekly folder
first_monthly=$(ls --sort=time -1 weekly/*$month* 2>/dev/null | tail -1)
# and put it in the monthly folder
ln -f $first_monthly monthly/
# we need only 5 weekly backups
ls --sort=time -1 weekly/* 2>/dev/null | tail -n+6 >> /tmp/deletebackups.txt
# we need only 5 monthly backups
ls --sort=time -1 monthly/* 2>/dev/null | tail -n+6 >> /tmp/deletebackups.txt
# delete the extra files
#rm $(cat /tmp/deletebackups.txt) 2>/dev/null
xargs --arg-file /tmp/deletebackups.txt rm