Как посмотреть каталог для изменений файлов

Я на маке. Я использовал директиву Launchd WatchPaths для просмотра каталога на предмет изменений файла. Мой сценарий срабатывает только при добавлении или удалении файла из просматриваемого каталога.

Однако сценарий не запускается при изменении файла.

По сути, я пытаюсь создать самодельный Dropbox для синхронизации папки "Сайты".

Есть ли способ сделать это через launchd, bash или python?

Я думаю, что в Linux есть что-то вроде inotify, но я не знаю решения для Mac.

1 ответ

Решение

Я попробовал свои силы в этой проблеме, используя пакет MacFSEvents(также доступен в PyPI):

import os

from fsevents import Observer, Stream


def callback(file_event):
    print file_event.name # the path of the modified file


def main():
    observer = Observer()
    observe_path = os.getcwd() # just for this example
    stream = Stream(callback, observe_path, file_events=True)
    observer.start()
    observer.schedule(stream)


if __name__ == '__main__':
    main()

Это позвонит callback каждый раз, когда файл создается, изменяется или удаляется (вы можете проверить, какое событие произошло, используя значение file_event.mask).

Обратите внимание, что вы, вероятно, захотите наблюдать за потоком вне основного потока (вышеприведенная программа отказывается выходить даже из KeyboardInterrupt). Более подробную информацию об API можно найти в MacFSEvents README. Надеюсь это поможет!

Другие вопросы по тегам