9

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

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

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

2 ответа2

17

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

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

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

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 для получения дополнительной информации.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .