Следите за изменениями файлов в папке OSX, а затем запускайте скрипт bash [duplicate]

10

Возможное дублирование:
наблюдайте за файловой системой в реальном времени на OS X и Ubuntu

Я ищу эффективный метод для мониторинга локального каталога в OSX, и если какие-либо файлы были изменены в этом каталоге, запустите сценарий bash для фиксации файлов в github.

Любые рекомендуемые инструменты для мониторинга каталога на предмет изменений файла, а затем запуска действия, то есть сценария bash?

Теган Снайдер
источник
1
Этот вопрос как есть, является пограничной рекомендацией по программному обеспечению, которая, как правило, не разрешена для Суперпользователя . Попробуйте перефразировать его, чтобы задать свой корневой вопрос: «Как я могу автоматически фиксировать изменения и отправлять файлы из git-репо всякий раз, когда файлы добавляются / удаляются / изменяются?"
Дарт Андроид
@DartAndroid, в FAQ, этот вопрос в порядке. ОП не просит покупки или совет покупки.
Эфсмит
1
@eph ОП просит рекомендации для чего-то, что не по теме. Однако главная проблема заключается в том, что они не объясняют свою проблему, а только просят их попытки решить.
slhck
Проблема проста. Контролируйте каталог на предмет изменений и фиксируйте эти изменения в репозитории. Это все в вопросе ОП. Ссылка, которую вы указали, содержит ответ. Хороший звонок.
ephsmith

Ответы:

19

Используя fswatch из вашего репозитория:

fswatch . 'git commit -avm "snapshot at ${date}"'

Этот простой пример будет ловить только изменения в файлах, уже находящихся в хранилище.

Пьер Карьер
источник
Это можно сделать с помощью действий с папками, встроенных в OS X. Смотрите ответ по ссылке, приведенной выше в slhk.
Ephsmith
1
Вы можете расширить свой ответ, добавив пример, объясняющий, чего ОП хочет достичь. Просто размещение ссылки не рекомендуется.
Slhck
Это выглядит обнадеживающе. Я думал, что смогу запустить ./fswatch / some / dir ./some/dir/bash_script.sh
Tegan Snyder
+1 - попробовал fswatchпосле прочтения вашего ответа. Отличная утилита - очень похожая inotifyна Linux, и она использует родную OS Xfsevent
cwd
2

Одним из вариантов будет просто использовать launchd. Сохраните список свойств как этот ~/Library/LaunchAgents/com.superuser.445907.plist, и загрузите его с помощью launchctl load ~/Library/LaunchAgents/com.superuser.445907.plistили, выйдя и вернувшись.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd>
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.superuser.445907</string>
    <key>Program</key>
    <string>/Users/username/script</string> <!-- ~/ doesn't work -->
    <key>WatchPaths</key>
    <array>
        <string>/Users/username/Folder/</string>
    </array>
    <key>ThrotteInterval</key>
    <integer>0</integer> <!-- run at most every 0 seconds, by default 10 -->
</dict>
</plist>

Launchd регистрирует изменения в файлах только тогда, когда они сохраняются атомарно или удаляются и воссоздаются каждый раз, когда они сохраняются. Большинство приложений OS X по умолчанию выполняют атомарное сохранение, но, например, TextMate и vim этого не делают. Изменения в подпапках просматриваемых папок не обнаружены.

launchctl unload $path && launchctl load $path применяет изменения к списку

Смотрите man launchdи man launchd.plistдля получения дополнительной информации.

LRI
источник
Интересный подход. Я посмотрю на это и вернусь к вам. Спасибо за ответ.
Теган Снайдер
Этот метод определенно имеет свои ограничения. Вы не можете обнаружить изменения в подпапках просматриваемых папок. Этот метод также не сообщает вам, в каком файле было событие (новый файл, изменение, удаление и т. Д.) - только то, что в пути было событие.
Volomike