LINUX.ORG.RU
ФорумAdmin

Бэкап скрипт: как в баще потирать каталог старее 5 дней?


0

0

Приветствую! к сожалению программер из меня тот ещё - искал, искал в гугле на эту тему, ничего вразумительного не нашёл. вкратце чего хочу: сделать скрипт на баше который из под крона запускаясь раз в день делал бы каталог с названием по дате (mkdir $(date +%Y%m%d) ) = типа 20080925 для сего числа, потом таром архивирует соотв каталоги и кидает туда. это всё не проблема, и это я сделал. но таким образом количество сих каталогов с бэкапами всё время будет расти пока не забьёт диск. итого в этот серипт хотелось бы вставить конструкцию которая в начале или конце скрипта как то определяла бы возраст каталогов, и все каталоги которые старше, например, 5 дней, потирала бы.

сам задумал конструкцию типа for kat in 'ls' do if $kat \> $(date +%Y%m%d)-5 then rm -rf $kat done

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

anonymous

Приблизительно так:
find /mnt/bck/*.bck -type f ! -mtime -5 | xargs rm -rf

man find, там много интересного ;)

Sirko
()

могу кинуть неви**нуый скрипт на руби писаный для чистки аплоада фтп сервера, он получал диапазон времени и удалял файлы к которым не обращались, есесно что под твои нужны его придется допилить.

wfrr ★★☆
()

> все каталоги которые старше, например, 5 дней, потирала бы.
Это неверно, представьте себе ситуацию, когда с какого-то момента архивация по какой-то причине загнулась и делаться перестала. Таким образом получится, что новых каталогов с файлами нет, и старые по прошествии 5 дней тоже удалились.
Удалять старое надо тогда, когда есть новое, т.е. лучше (на мой взгляд) хранить 5 ПОСЛЕДНИХ архивов, а остальные удалять.
Делать можно к примеру так:
ls -t | head -n -5 | xargs rm -rf

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

Верно, так и проще. Может еще случится что сервер проваляется 6 дней, при восстановительной загрузке потрет все бекапы (да притянул за уши).

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

Да все просто пишите бэкапы с номером дня недели $(date +%w). И всио.
Проблема, что характерно, решена. И не надо ничего тереть.

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

С другой стороны может что-то упасть например во время отпуска и за 2 недели рабочие бекапы уже удалятся.

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

Если бекап делается не на локальну машину, а на примонтиравонный раздел (неважно, NFS, CIFS), то можно проверять, примонтирован он или нет. Примерно так:
test -s /mount/backup/present || exit 0
А вообще вариантов по проверке куча, если есть фантазия, то можно такого намутить....

anonymous
()

У команды date есть опция -d, там можно указывать дату в различных форматах, допустим так:

date -d '5 day ago' '+%Y%m%d' вы получите имя вашего каталога, который был создан 5 дней назад.

Рекомендуемый алгоритм: Сосчитать кол-во бекап каталогов. Если их 5, то попробовать удалить '5 day ago', если их меньше 5, то ничего не удалять, если их больше 5, то отсортировать их по дате и удалить самые старые. Что то типа find . -printf '%Tk %p\n' | sort -n -k1,1 | tail -n +5

Ну можно ещё добавить проверку на отсутствие каталогов с "неправильными" именами и т.д.

Ну а можно поручить все logrotate. Ему без разницы какие файлы ротировать. В скрипте просто создавать backup, а logrotate его переименует...

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