
Я пытаюсь создать свой собственный небольшой скрипт резервного копирования, я хочу использовать снимки BTRFS и хранить их некоторое время. Между тем, создание снимков больше не является для меня проблемой, но теперь я хотел бы снова удалить их через 5 дней.
Я разработал следующую команду для получения времени создания снимков.
/usr/bin/find /run/btrfs-root/sdb/__snapshot/ -mindepth 1 -maxdepth 1 -name "auto-sn-*" -exec /usr/sbin/btrfs subvolume show {} \; | /usr/bin/grep "__snapshot|Creation"
выход:
__snapshot/auto-sn-data-20210803
Creation time: 2021-08-03 14:59:01 +0200
__snapshot/auto-sn-Log-20210803
Creation time: 2021-08-03 15:00:42 +0200
К сожалению, я не могу найти способ принять решение об удалении на основе строки даты вывода. Теперь точный вопрос: как я могу инициировать удаление снимка через 5 дней на основе этой информации?
Спасибо
Небольшая идея:
/usr/bin/find /run/btrfs-root/sdb/__snapshot/ -mindepth 1 -maxdepth 1 -name "auto-sn-*" ! \( -name "*$(/usr/bin/date -d '1 day ago' +%Y%m%d)" -o -name "*$(/usr/bin/date -d '2 day ago' +%Y%m%d)" -o -name "*$(/usr/bin/date -d '3 day ago' +%Y%m%d)" \) -exec /usr/sbin/btrfs subvolume delete {} \;
Я не знаю, сработает ли это.
решение1
Чтобы получить только дату, вы можете сделать это:
$ btrfs subvolume show / | grep -oP 'Creation time:\s*\K\d.*$'
# 2021-03-11 04:22:58 +0100
На этом этапе вы, по сути, закончили, потому что, к счастью, даты представлены в формате ISO, который вы можете легко сравнить, используя обычные функции сравнения строк bash:
$ old_date=$(btrfs subvolume show / | grep -oP 'Creation time:\s*\K\d.*$')
(some time passes)
$ new_date=$(btrfs subvolume show / | grep -oP 'Creation time:\s*\K\d.*$')
$ [[ "$old_date" < "$new_date" ]] && echo newer || echo older