#! /usr/bin/python3 from pathlib import Path def get_subtree_mtime(root: str | Path) -> float: from itertools import chain from os import walk from os.path import getmtime maxtime = 0 for dirname, _, filenames in walk(root): dirpath = Path(dirname) maxtime = max( chain( [maxtime, getmtime(dirpath)], (getmtime(dirpath / filename) for filename in filenames), ) ) return maxtime def tree_changed_p(root: str | Path, check_file: str | Path) -> bool: from os.path import getmtime try: filetime = getmtime(check_file) except FileNotFoundError: return True return get_subtree_mtime(root) > filetime if __name__ == "__main__": import argparse import sys parser = argparse.ArgumentParser(description="Manage the desktop containers") parser.add_argument("--directory", required=True, help="Directory tree to check") parser.add_argument( "--check-file", required=True, help="Timestamp file for comparison" ) args = parser.parse_args() if tree_changed_p(root=args.directory, check_file=args.check_file): sys.exit(0) else: sys.exit(1)