Skip to content

Instantly share code, notes, and snippets.

@kristiker
Created August 10, 2023 22:33
Show Gist options
  • Save kristiker/28c022aa24a84eaf4724a887e714d728 to your computer and use it in GitHub Desktop.
Save kristiker/28c022aa24a84eaf4724a887e714d728 to your computer and use it in GitHub Desktop.
import sys
import time
import shutil
from pathlib import Path
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class FileHandler(FileSystemEventHandler):
def __init__(self, src_folder: Path, dest_folder: Path):
self.src_folder = src_folder
self.dest_folder = dest_folder
def on_created(self, event):
if event.is_directory:
return
src_path = Path(event.src_path)
dest_path = self.dest_folder / src_path.relative_to(self.src_folder)
print(f"Copying {src_path} to {dest_path}")
dest_path.parent.mkdir(parents=True, exist_ok=True)
try:
shutil.copy(src_path, dest_path.parent)
except Exception as e:
print(f"Failed to copy file (most likely was deleted!) {src_path}")
def watch_folder(src_folder, dest_folder):
event_handler = FileHandler(src_folder, dest_folder)
observer = Observer()
observer.schedule(event_handler, src_folder, recursive=True)
observer.start()
print("Monitoring for changes...")
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
if __name__ == "__main__":
src_folder = Path(sys.argv[1] if len(sys.argv) > 1 else ".")
dest_folder = Path("./copy" if len(sys.argv) > 1 else "../copy")
watch_folder(src_folder, dest_folder)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment