首页 > 解决方案 > 递归搜索时如何忽略特定目录和文件夹?看门狗观察者

问题描述

嗨,我有 python 脚本,它基本上递归地跟踪new file creationin/var/www/html/data文件夹并通过电子邮件发送文件和创建时间。我正在使用watchdogs observer. 问题是目录中有文件夹名称appdata想跳过该文件夹我不想检查新文件是否在app文件夹中创建我如何使用看门狗跳过它。

这是我的代码。

class Handler(watchdog.events.RegexMatchingEventHandler):
    BLUE = '\033[94m'
    GREEN = '\033[92m'
    YELLOW = '\033[93m'
    RED = '\033[91m'
    BOLD = '\033[1m'
    END = '\033[0m'

    def __init__(self):
           watchdog.events.RegexMatchingEventHandler.__init__(self,
                regexes=['(?!.*?\\.(?:sw|tm)p$)'], ignore_regexes=['.*\\.(db-wal|db-shm)'],
                ignore_directories=False, case_sensitive=False)

    def on_created(self, event):
#        print ('New File create with Name % s in Directory' % event.src_path)
        current_date_time = str(datetime.datetime.now())
        new_file = event.src_path
        split_new_file = new_file.split("/data",1)[1]
        print("->" + " " + "New File Create with name : " + " " + split_new_file)
        mail_content = "New File Create with Name" + " " +  split_new_file + " " + "at" + " " + current_date_time
        sender_address = ''
        sender_pass = ''
        receiver_address = ''
        message = MIMEMultipart()
        message['From'] = sender_address
        message['To'] = receiver_address
        message['Subject'] = 'New File Created'
        message.attach(MIMEText(mail_content, 'plain'))
        session = smtplib.SMTP('smtp.gmail.com', 587) #use gmail with port
        session.starttls() #enable security
        session.login(sender_address, sender_pass) #login with mail_id and password
        text = message.as_string()
        session.sendmail(sender_address, receiver_address, text)
        session.quit()
        print("[INFO] Email Sent to :" + " " + receiver_address)
#        call(["python3", "notify.py"])

#    def on_modified(self, event):
#        print("Watchdog received modified event - % s." % event.src_path)

if __name__ == '__main__':
    app_start_time = datetime.datetime.now()
    logger=logging.getLogger()
    logging.basicConfig(level=logging.INFO)
    src_path = r"/var/www/html/nextcloud/data"
    logger.info(
        '\n'
        '-----------------------------------------------------------\n'
        '    Running {0}\n'
        '    PID: {1}\n'
        '    Started on: {2}\n'
        '-----------------------------------------------------------\n'
        .format(__file__, os.getpid(), app_start_time.isoformat())
    )

    print ("**** Detecing new files in :" + src_path + " " + "****")

    event_handler = Handler()
    observer = watchdog.observers.Observer()
    observer.schedule(event_handler, path=src_path, recursive=True)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    finally:
        uptime = datetime.datetime.now()-app_start_time
        logger.info(
            '\n'
            '-----------------------------------------------------------\n'
            '    Stopped {0}\n'
            '    Uptime: {1}\n'
            '-----------------------------------------------------------\n'
            .format(__file__, str(uptime))
        )

标签: pythonpython-watchdog

解决方案


推荐阅读