import datetime import os import logzero from logzero import logger from pathlib import Path from config import ROOT, PROTECTED, EXCLUDED logzero.logfile("/data/mr_propre/clean_dirs.log", maxBytes=1e6, backupCount=3) def clean_triage(logger=logger): root = Path(ROOT)# + "Triage/Series") all_files = {p for p in root.rglob("*") if p.is_file()} now = datetime.datetime.now() for p in all_files: if [x for x in PROTECTED if x in p.parents]: pass elif p.suffix.lower() in [ ".nfo", ".txt", ".exe", ".bat", ".url", ".gif", ".png", ".jpg", ".jpeg", ]: # print('remove', p) logger.info(f"removed {p} for suffix") os.remove(p) elif (now - datetime.datetime.fromtimestamp(p.stat().st_atime)).days > 3: os.remove(p) logger.info(f"removed {p} for old age") all_links = {p for p in root.rglob("*") if p.is_symlink()} for p in all_links: try: if (now - datetime.datetime.fromtimestamp(p.stat().st_atime)).days > 3: os.unlink(p) logger.info(f"unlinked {p}") except FileNotFoundError: # Target deleted /broken link os.unlink(p) def remove_empty_dirs(logger=logger): logger.info('remove_empty_dirs') root = Path(ROOT) excluded = {Path(x) for x in EXCLUDED} non_empty_dirs = {Path(p.parent) for p in root.rglob("*") if p.is_file()} all_dirs = {p for p in root.rglob("*") if not p.is_file()} for n in [x for x in non_empty_dirs]: [non_empty_dirs.add(Path(p)) for p in n.parents] real_empty_dirs = [ x for x in all_dirs.difference(non_empty_dirs) if x not in excluded ] print(real_empty_dirs) for g in sorted(real_empty_dirs, reverse=True): # print(g) try: g.rmdir() logger.info(f"empty dir {g} removed") # print("OK ---> ", g) except FileNotFoundError: pass except OSError as e: print(f"{g} raises OS error {e.args}") logger.error(f"{g} raises OS error {e.args}") pass if __name__ == "__main__": logger.info("launching") clean_triage() remove_empty_dirs() logger.info("ended")