''' Clean the direction in CML Server (tmp2 or home directory) Suppose that the CLEAN_PATH may seems like this. And we will only check the directories & files under the user directory with "depth=1" CLEAN_PATH | +---- user1 (user directory) | | | +--- file1 (depth=1, will be check) | | | +--- Project1 (depth=1, will be check) | | | | | +--- subset1-1 (depth=2, won't be check) | | | +--- Project2 (depth=1) | | | +--- subset2-1 (depth=2) | | | +--- subset2-2 (depth=2) | +---- user2 (user directory) | +--- Project1 (depth=1) | +--- subset1-1 (depth=2) ''' import os import subprocess import smtplib from email.mime.text import MIMEText CLEAN_PATH = "/home/master/12" KEEP_FILES = [".bashrc", ".bash_logout", ".bash_profile", "public-html", ".ssh", ".profile", "examples.desktop", ".bash_history", ".config", ".zshrc", ".vimrc", ".gnupg", ".oh-my-zsh", ".vim", ".viminfo", ".vscode-server", ".gitconfig", ".local"] WHITE_LIST = ["mysql", "unix_manager", "unixmanager215", "gangxing", "how083012", "yulunliu", "amie12349", "minliwu", "chenyuyang"] DATE = '2024-02-01' GOOGLE_OWNER = "snsd0805@cmlab.csie.ntu.edu.tw" GOOGLE_CODE = os.environ['GOOGLE_CODE'] class Mailer(): def __init__(self, google_owner, google_code): self.google_owner = google_owner self.google_code = google_code def send(self, sender, receiver, subject, msg): msg = MIMEText(msg, 'html') msg['Subject'] = subject msg['From'] = sender msg['To'] = receiver smtp = smtplib.SMTP('smtp.gmail.com', 587) smtp.ehlo() smtp.starttls() smtp.login(self.google_owner, self.google_code) status = smtp.send_message(msg) smtp.quit() if status == {}: return True else: return False class Cleaner(): def __init__(self, root, date, mailer, white_list=WHITE_LIST, keep_files=KEEP_FILES): self.root = root self.date = date self.white_list = white_list self.keep_files = keep_files self.mailer = mailer def run(self, test=True, send_mail=False): for user in sorted(os.listdir(self.root)): print(user) if user in self.white_list: continue for obj in sorted(os.listdir(f'{self.root}/{user}')): if obj in self.keep_files: continue obj = obj.replace(' ', '\ ') # stat {file or dir}: # get Create, modified information # grep Modify: # get Modified time # awk: # -F ' ': use space to split the data # print $2: column 2 (get date) modify_date = subprocess.getoutput(f"stat {self.root}/{user}/{obj} | grep Modify | awk -F ' ' '{{print $2}}'" ) needRemove = modify_date < DATE print(f' {obj}') print(f' {modify_date} {needRemove}') mailer = Mailer(GOOGLE_OWNER, GOOGLE_CODE) mailer.send('unix_manager@cmlab.csie.ntu.edu.tw', 'snsd0805@cmlab.csie.ntu.edu.tw', '[測試郵件] test', 'Test mail') cleaner = Cleaner('/home/master/12', "2024/02/01", mailer) cleaner.run()