Dropboxのカメラアップロード機能はすごく便利だけれど、全てのファイルが同じフォルダにアップロードされてしまうので、 写真が多くなると目的のファイルを探すのに苦労します。
なので、アップロードされたファイルを自動で日付フォルダに振り分けるスクリプトを作りました。
#!/usr/bin/env python
# coding:utf-8
import os
import time
import re
import shutil
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
WATCH_DIR = os.path.join(os.environ['HOME'], "Dropbox/Camera Uploads/")
FILENAME_MATCHER = re.compile('/([\d]{4}-[\d]{2})-([\d]{2}).*\.(jpg|png|mp4)$')
def move_file(src):
try:
if not os.path.exists(src):
return
m = FILENAME_MATCHER.search(src)
if m:
save_dir_name = m.group(1)
save_dir = os.path.join(WATCH_DIR, save_dir_name)
if not os.path.exists(save_dir):
os.makedirs(save_dir, 0755)
shutil.move(src, save_dir)
except Exception:
pass
class EventHandler(FileSystemEventHandler):
def on_created(self, event):
move_file(event.src_path)
def on_modified(self, event):
move_file(event.src_path)
def main():
event_handler = EventHandler()
observer = Observer()
observer.schedule(event_handler, WATCH_DIR)
observer.start()
try:
while True:
time.sleep(10)
except (Exception, KeyboardInterrupt):
observer.stop()
observer.join()
if __name__ == '__main__':
main()
前回使ってみたPythonモジュールのwatchdogを使用しています。
Dropboxをインストールしたサーバで動かしておけば、アップロードの度にフォルダに振り分けれます。