Files
mr_propre/clean_dirs.py
2021-12-11 18:04:13 +01:00

81 lines
2.3 KiB
Python

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")