81 lines
2.3 KiB
Python
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 > 7:
|
|
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")
|