LINUX.ORG.RU
ФорумAdmin

Удаление старых бекапов

 ,


0

1

Всем привет. В папке каждый создаются бекапы базы данных вида: databasename.ddmmyy.sql. Однако их становится очень много и старые бекапы надо автоматически удалять. Если удалять все файлы старее скольких-то дней, то возможна такая ситуация, что бекапы какое-то время не создавались и в результате будут удалены все бекапы:

find ./ -type f -mtime +7 -exec rm -rf {} \;
Можно делать что-то типа:
ls -t databasename* | tail -n +7 | xargs rm -r
для удаления всех файлов, кроме семи последних, но тогда возникает проблема, что для каждой базы данных надо прописывать имя, так как количество баз данных может изменятся. Как можно организовать удаление старых бекапов, чтобы оставалось 7 последних бекапов для каждой базы данных, с учетом того, что все файлы лежат в одной папке?

Очевидно - отcлеживать, что по указанной базе осталось >n файлов.

handbrake ★★★ ()

Взять список find ./ -type f -mtime +7, сортировать по дате, убрать из списка 7 самых новых, остальные (если что-то осталось) удалить.

sdio ★★★★★ ()
Ответ на: комментарий от sdio

Взять список find ./ -type f -mtime +7, сортировать по дате, убрать из списка 7 самых новых, остальные (если что-то осталось) удалить.

Так могут быть бекапы нескольких баз. И просто брать последние семь нельзя.

delimer ()
Ответ на: комментарий от sdio

добавь -name 'prefix*' и запусти несколько раз, по разу для каждой базы

В топике писал, что это не удобно, так как количество баз данных может изменятся и придется каждый раз менять условия удаления.

Видимо придется хранить бекапы за каждый день в отдельной папке.

delimer ()
Ответ на: комментарий от delimer

они у тебя и так есть в скрипте бэкапа, в нем же и чисть.

handbrake ★★★ ()
Ответ на: комментарий от redgremlin

Точнее, это бы сработало, если бы ты изначально хранил дату правильно, в виде yymmdd, пригодном для числового сравнения и сортировки. Ну и заменить *xz в первом ls на твоё *sql я забыл.

redgremlin ★★★★★ ()
Последнее исправление: redgremlin (всего исправлений: 1)
Ответ на: комментарий от sdio

for BASE in $(ls *.*.sql | cut -d'.' -f1 | sort -u); do

Во, это самый удобный и понятный пример. Спасибо.

delimer ()

Я для домашнего бэкапа складываю всё в yy/mm/dd/* и при маленьком количестве свободного места вручную делаю rm -rf mm.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.