LINUX.ORG.RU
ФорумAdmin

Пургер перед бэкапом


0

1

Бэкапы складываются так:

# ls
# ls
2011-05-24_20-54-01_adam_zer.dd-image.gz
2011-05-24_20-58-01_adam_zer.dd-image.gz
2011-05-24_21-29-01_adam_zer.dd-image.gz
2011-05-25_21-29-01_adam_zer.dd-image.gz
2011-05-26_21-29-02_adam_zer.dd-image.gz
2011-05-27_21-29-01_adam_zer.dd-image.gz
2011-05-28_21-29-01_adam_zer.dd-image.gz
2011-05-29_21-29-01_adam_zer.dd-image.gz
2011-05-30_21-29-01_adam_zer.dd-image.gz
drbd0.mt.dd-image.gz
drbd1.ast.dd-image.gz
drbd2.zer.dd-image.gz

Необходимо перед бэкапом запустить скрипт который почистит и оставит к примеру X самых свежих файлов, опираясь на маску *__adam_zer.dd-image.gz (В папке могут быть и другие файлы от других бэкапов)

★★★★★

а может

логичнее будет перебрать все файлы в директории по маске и если дата создания старше X дней то удалить его? Кажется такое проще реализовать

petav ★★★★★
() автор топика

find /path/to/directory -name '*__adam_zer.dd-image.gz' -mtime +1 -delete
Удалит файлы по указанной маске, которые изменяли более дня назад.

AITap ★★★★★
()
Ответ на: комментарий от petav
$ ls -1 | sort -g | head -n 5 | sed s/^/rm\ / > remove_five_oldest_files_script
$ sh remove_five_oldest_files_script

Возьми проверь на тестовой директории с пустыми файлами например так

$ mkdir ./test_dir
$ ls -1 ./backup | sed s/^/touch\ / > ./test_dir/backup_file_list
$ cd test_dir
$ sh backup_file_list
$ ls -1
$ ls -1 | sort -g | head -n 5 | sed s/^/rm\ / > remove_five_oldest_files_script
$ ls -1
Думаю тут всё понятно. Можно конечно при помощи find, но поимени файла надёжней

adriano32 ★★★
()
Ответ на: ? от petav

А маска

Здесь маска не учитывается как я понял. Её нужно sed добавить?

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

ls -1 выводим список в столбик
sort -g - сортируем по цифрам
head -n 5 - выводим пять верхних строк (пять - количество бэкапов которые хочешь удалить
sed s/^/rm\ / - дописываем в списке этих пяти файлов в начало каждой строки rm[пробел]
перенаправляем в файл > remove_five_oldest_files_script

Затем sh remove_five_oldest_files_script - выполнит то что в нём записано, то есть удалит пять бєкапов, которые при сортировке по цифрам в имени оказались самыми первыми, то есть старее

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

Думаю тут всё понятно

Мне пока не очень. Т.е мы отбираем свежие файлы в глубину 5 дней. Пишем их в файл. А потом выполняем этот файл. А в файле команды типа

rm 2011-05-24_20-54-01_adam_zer.dd-image.gz
А где здесь имена файлов учитываются?

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

Все теперь понятно, сейчас поэкспериментирую

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

спасибо за комментарий

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

У тебя файлы имеют дату типа год-месяц-число-час-минута-секунда
sort -g отсортирует строки, полученные по конвееру от ls -1 так, чтоб к примеру 2011-05-24_21-29-01_adam_zer.dd-image.gz было выше чем 2011-05-25_21-29-01_adam_zer.dd-image.gz, потому что 4<5.
Параметром у head задашь число файлов, которые хочешь отобрать с начала списка.

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

спасибо работает так как нужно. Огромное.

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

У каждого админа должен быть набор личных костылей, которые он не променяет ни на что в свете!

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

Это мне учится позволяет. А что такое logrotate посмотрю. Спасибо

petav ★★★★★
() автор топика
cleanup () {
    
    PERIOD=${1:-7d}
    
    date=`date "+%Y-%m-%d"`
    expire=`date -v-${PERIOD} "+%Y-%m-%d"`

    rm -f ${expire}_*_adam_zer.dd-image.gz

}

если оно запускается каждый раз перез бэкапом - то удаляет последние неактуальные.

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

> сли оно запускается каждый раз перез бэкапом - то удаляет последние неактуальные.

Каждый раз перед бэкапом.

Точнее последнюю неактуальную группу за одно число, если я правильно понял именование файлов.

Групп нет, просто в один день много бэкапов снял, а так один день один бэкап. Спасибо за вариант. Предыдущие уже реализовал ))). Ваш тоже попробую.

petav ★★★★★
() автор топика
Ответ на: date -v? от dexpl

Хм, забыл проверить по man'у. Я извиняюсь, но этот date из BSD.

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