Назад | Перейти на главную страницу

Сценарий оболочки для хранения резервных копий за последние 3 дня, последние 3 недели и последние 3 месяца

Я не совсем уверен, как это сделать, из-за незнания оболочки.

NOW=$(date +"%Y.%m.%d.%T")

tar czf /backups/web_backup_$NOW.tgz /web/

Не могли бы вы помочь мне удалить старые резервные копии, чтобы в них остались только:

  1. Последние 3 дня
  2. По одной резервной копии за последние 3 недели
  3. По одной резервной копии за последние 3 месяца

Посмотрите на 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