Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #http://thepythoncorner.com/dev/how-to-create-a-watchdog-in-python-to-look-for-filesystem-changes/
- import os
- import time
- import logging
- from watchdog.observers import Observer
- from watchdog.events import PatternMatchingEventHandler
- from pathlib import Path
- def get_extention(path):
- """
- Should return the extension in lower case
- """
- return path.suffix[1:].lower()
- def is_file(path):
- return path.is_file() and path.parent==Path(".")
- def move_file_to_folder(src, dest):
- src.rename(src.parent / dest / src.name)
- IMAGE_EXTENTIONS = ["png","gif","jpg","jpeg","tif",]
- ARCHIVE_EXTENSIONS = ["zip","tar","gz","xz","lz","bz2"]
- TABULAR_DATA = ["csv", "xls", "xlsx"]
- SOFTWARE_EXTENSIONS = ["deb", "dmg", "exe", "msi", "iso", "jar"]
- MEDIA = ["mp3", "mp4", "wav"]
- SCRIPTS = ["py", "sh", "sql"]
- OFFICE = ["doc","dot","wbk","docx","docm","dotx","dotm","docb","xlt","xlm","xlsm","xltx","xltm","xlsb","xla","xlam","xll","xlw","ppt","pot","pps","pptx","pptm","potx","potm","ppam","ppsx","ppsm","sldx","sldm","odt", "fodt", "ods", "fods","odp", "fodp","odg", "fodg","odf"]
- def handle_file(path):
- extension = get_extention(path)
- if extension in IMAGE_EXTENTIONS:
- move_file_to_folder(path, "images")
- elif extension in ARCHIVE_EXTENSIONS:
- move_file_to_folder(path, "archives")
- elif extension in TABULAR_DATA:
- move_file_to_folder(path, "CSV")
- elif extension in SOFTWARE_EXTENSIONS:
- move_file_to_folder(path, "software")
- elif extension in MEDIA:
- move_file_to_folder(path, "media")
- elif extension in ["json", "pdf", "txt", "sql", "j2"]:
- print("moving {} to {}".format(path, extension))
- move_file_to_folder(path, extension)
- elif extension in SCRIPTS and "manager" not in path.name:
- move_file_to_folder(path, "scripts")
- elif extension in OFFICE:
- move_file_to_folder(path, "office")
- else:
- print("leaving {} where it is. {}".format(path, extension))
- def on_created(event):
- src = Path(event.src_path)
- if is_file(src):
- handle_file(src)
- else:
- print("hey, {} has been created!".format(event.src_path))
- def on_deleted(event):
- print("what the ! Someone deleted {}!".format(event.src_path))
- def on_modified(event):
- print("hey buddy, {} has been modified".format(event.src_path))
- def on_moved(event):
- print("ok ok ok, someone moved {} to {}".format(event.src_path, event.dest_path))
- if __name__ == "__main__":
- fs = [Path(f) for f in os.listdir(".")]
- fs = [f for f in fs if is_file(f)]
- [handle_file(f) for f in fs]
- logging.basicConfig(level=logging.INFO,
- format='%(asctime)s - %(message)s',
- datefmt='%Y-%m-%d %H:%M:%S')
- path = '.'
- patterns = "*"
- ignore_patterns = ""
- ignore_directories = False
- case_sensitive = True
- my_event_handler = PatternMatchingEventHandler(patterns, ignore_patterns, ignore_directories, case_sensitive)
- my_event_handler.on_created = on_created
- my_event_handler.on_deleted = on_deleted
- my_event_handler.on_modified = on_modified
- my_event_handler.on_moved = on_moved
- observer = Observer()
- observer.schedule(my_event_handler, path, recursive=True)
- observer.start()
- try:
- print("started")
- while True:
- time.sleep(1)
- except KeyboardInterrupt:
- observer.stop()
- observer.join()
Advertisement
Add Comment
Please, Sign In to add comment