files
This commit is contained in:
80
clean_dirs.py
Normal file
80
clean_dirs.py
Normal file
@@ -0,0 +1,80 @@
|
||||
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")
|
||||
Reference in New Issue
Block a user