使用 bash 刪除舊的 BTRFS 快照

使用 bash 刪除舊的 BTRFS 快照

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

相關內容