#!/usr/bin/env python3 import subprocess import re import time #_snapshots = open("zfs.txt","r").read() _snapshots = subprocess.check_output("/usr/sbin/zfs list -t snapshot -Hpo name,creation".split()) LABELS=("frequent","hourly","daily","weekly","monthly","yearly","backup-zfs","bashclub-zfs") RE_LABELSEARCH = re.compile("|".join(LABELS)) _datasets = {} for _datastore,_snapshot,_creation in re.findall("^([\w_./-]+)@([\w_.-]+)\t(\d+)",_snapshots.decode('utf-8'),re.M): if _datastore not in _datasets: _datasets[_datastore] = {} _label = RE_LABELSEARCH.search(_snapshot) if _label: _label = _label.group(0) else: _label = "other" if _label not in _datasets[_datastore]: _datasets[_datastore][_label] = [] _datasets[_datastore][_label].append((_snapshot,int(_creation))) for _datastore in _datasets.keys(): print(_datastore) print("-"*40) for _label in _datasets[_datastore].keys(): _data = _datasets[_datastore][_label] _first = time.strftime("%d.%m.%Y %H:%M:%S",time.localtime(_data[0][1])) _last = time.strftime("%d.%m.%Y %H:%M:%S",time.localtime(_data[-1][1])) _count = len(_data) print(f" {_label} {_count}") print(f" {_first} {_data[0][0]}") if _count > 1: print(f" {_last} {_data[-1][0]}") print("")