Как я могу удалить каждую почасовую резервную копию, кроме 24 самых последних?

336
Édouard

Раньше у меня был сервер с ежечасным / ежедневным резервным копированием, все легко доступны благодаря этому хорошему учебнику . К сожалению, указанный сервер перегорел, и теперь мне нужно делать резервные копии на NAS, который не запускает 1 мой любимый Linux-вариант. Случилось так, что мое предыдущее решение не работало на указанном NAS, потому что его бинарный пакет предлагает меньше возможностей.

Тем не менее, я считаю, что hourly.nэто ужасные имена для резервных копий. Я бы предпочел, чтобы они были отформатированы как horaire_YYYY_MM_DD_HHhMM2, чтобы пользователи сразу знали, когда была сделана резервная копия.

Я хочу хранить 24-часовые резервные копии, а не ежедневные. Обратите внимание, что я не хочу хранить ежечасные резервные копии только в течение последних 24 часов; если по какой-то причине 3 было пропущено несколько резервных копий, я все равно хотел бы сохранить 24 резервных копии, даже если некоторые из них старше одного дня.

Вот как я это делал:

 ls --format=single-column --directory --sort=time $(scheme "*") \ | tail --lines +$((backup_count + 1)) \ | xargs --verbose --delimiter="\n" rm -rf 

schemeэто просто функция, которая обеспечивает правильное форматирование резервной копии каталога, включая дату. Здесь используется *для сопоставления каждого почасового резервного копирования. lsперечисляет каждый почасовой каталог резервных копий, сортирует их в обратном порядке по времени создания 4, tailsотбрасывает 24 новых и xargsудаляет оставшиеся.

Теперь я должен убедиться, что я использую только параметры POSIX. Я впервые пошел с:

ls -1 -d -t "$(scheme \*)" \ | tail -n +$((backup_count + 1)) \ | sed 's/\n/\0/g' \ | xargs -0 rm -rf 

но lsне расширяет *; Я заменил его на find, но понятия не имею, как отсортировать результаты по дате создания. Интересно, смогу ли я также tailполностью обойтись благодаря find, который, вероятно, в любом случае является правильным инструментом для решения этой задачи.

Как я могу запустить команду для каждого почасового резервного копирования, который не является одним из 24 последних?


  1. Что ж, возможно, возможно, но это будет означать отказ от всех удобных инструментов и поддержки, предоставляемой провайдером NAS, которая нам не нужна.
  2. horaireвместо того, hourlyпотому что пользователи и я - французские спикеры.
  3. Сервер резервного копирования должен быть отключен на один день, потому что он должен быть перемещен, например
  4. Алфавитный порядок, вероятно, мог бы быть таким же хорошим, если бы даты игнорировали летнее время, что было бы неудачным, но приемлемым компромиссом.
1
Вы, вероятно, должны использовать `find` вместо` ls`. С помощью find вы можете легко получить список файлов старше 24 часов, вместо того, чтобы анализировать вывод ls. Кроме того, синтаксический анализ ls [не рекомендуется] (http://unix.stackexchange.com/questions/128985/why-not-parse-ls). Sami Laine 8 лет назад 1
@SamiLaine Как я сказал в (самой последней строке длинного) вопроса, это направление, в котором я сейчас движусь. Это, вероятно, также позволило бы мне избежать проблем с цитированием из-за пробелов в именах файлов. Но, как я уже писал, мне не нужен список каталогов старше 24 часов, мне нужен список (что угодно, кроме) последних 24 каталогов, независимо от их возраста. Если по какой-либо причине резервное копирование останавливается более чем на 24 часа, я все еще хочу «последнюю почасовую резервную копию» в «rsync --link-dest` с, например, Édouard 8 лет назад 0
Кроме того, NAS * поставляется * с установленным Python. Переход на него *, вероятно, * будет хорошей идеей. Édouard 8 лет назад 0
Однажды я написал небольшую программу, предназначенную именно для этого: выбрать, какие резервные копии следует удалить, основываясь на их дате и наборе настраиваемых правил. Смотрите скрипт `bu-rmselect` на https://www.jaapeldering.nl/software/ Jaap Eldering 8 лет назад 0

0 ответов на вопрос

Похожие вопросы