83 lines
2.7 KiB
Python
83 lines
2.7 KiB
Python
import os
|
|
import subprocess
|
|
|
|
MAIL_MESSAGE = '''
|
|
Hi, {}<br>
|
|
<br>
|
|
因 CML Server 掛載家目錄(~)的 NAS 空間即將不足,我們將於 4/28(日) 00:00 開始清除長時間沒有修改紀錄的資料夾<br>
|
|
<br>
|
|
本次清理,我們將移除 2024/02/01 以後沒有修改紀錄的資料夾、檔案<br>
|
|
以下是您家目錄中可能被移除的內容:<br>
|
|
<ul>
|
|
{}
|
|
</ul>
|
|
<br>
|
|
若是仍要保留的資料請隨意對其做修改,以更新修改紀錄的時間。<br>
|
|
造成不便,敬請見諒!<br><br>
|
|
|
|
<br>
|
|
* 信件由網管自動化工具寄出,若為錯誤寄送請忽略此信件。<br>
|
|
<br>
|
|
Best,<br>
|
|
CMLab Unix Manager, Ting-Jun Wang<br>
|
|
CMLab, National Taiwan University<br>
|
|
Email: unix_manager@cmlab.csie.ntu.edu.tw<br>
|
|
<pre>
|
|
__ __ _
|
|
/ / / /__ (_)_ __
|
|
__ ___/ /_/ / _ \/ /\ \ /
|
|
/ |/ /\____/_//_/_//_\_\____ ____
|
|
/ /|_/ / _ `/ _ \/ _ `/ _ `/ -_) __/
|
|
/_/ /_/\_,_/_//_/\_,_/\_, /\__/_/
|
|
/___/
|
|
</pre>
|
|
'''
|
|
|
|
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'<li>{date} - {obj}</li>'
|
|
msg = MAIL_MESSAGE.format(username, msg)
|
|
|
|
self.mailer.send(sender, receiver, subject, msg)
|