import os import subprocess MAIL_MESSAGE = ''' Hi, {}

因 CML Server 掛載家目錄(~)的 NAS 空間即將不足,我們將於 4/28(日) 00:00 開始清除長時間沒有修改紀錄的資料夾

本次清理,我們將移除 2024/02/01 以後沒有修改紀錄的資料夾、檔案
以下是您家目錄中可能被移除的內容:

若是仍要保留的資料請隨意對其做修改,以更新修改紀錄的時間。
造成不便,敬請見諒!


* 信件由網管自動化工具寄出,若為錯誤寄送請忽略此信件。

Best,
CMLab Unix Manager, Ting-Jun Wang
CMLab, National Taiwan University
Email: unix_manager@cmlab.csie.ntu.edu.tw
            __  __     _
           / / / /__  (_)_ __
   __  ___/ /_/ / _ \/ /\ \ /
  /  |/  /\____/_//_/_//_\_\____ ____
 / /|_/ / _ `/ _ \/ _ `/ _ `/ -_) __/
/_/  /_/\_,_/_//_/\_,_/\_, /\__/_/
                      /___/
''' class Cleaner(): def __init__(self, user_dir, date, mailer, white_list, keep_files): self.user_dir = user_dir self.date = date self.white_list = white_list self.keep_files = keep_files self.mailer = mailer def run(self, test=True, send_mail=False): username = self.user_dir.split('/')[-1] if username in self.white_list: print(f' WHITE LIST: {username}') return remove_objs = [] for obj in sorted(os.listdir(self.user_dir)): 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.user_dir}/{obj} | grep Modify | awk -F ' ' '{{print $2}}'" ) if modify_date < self.date: remove_objs.append((obj, modify_date)) print(f' {modify_date} {obj}') if send_mail and len(remove_objs) != 0: if test: receiver = 'snsd0805@cmlab.csie.ntu.edu.tw' else: receiver = f'{username}@cmlab.csie.ntu.edu.tw' sender = 'unix_manager@cmlab.csie.ntu.edu.tw' subject = f'[網管通知] CML Server 清理預計被移除的內容({username})' msg = '' for obj, date in remove_objs: msg += f'
  • {date} - {obj}
  • ' msg = MAIL_MESSAGE.format(username, msg) self.mailer.send(sender, receiver, subject, msg)