
我正在嘗試建立自己的小備份腳本,我想使用 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