Відстежуйте зміну файлу OSX за папками, а потім запустіть скрипт bash [дублікат]


10

Можливий дублікат:
дивіться файлову систему в режимі реального часу на OS X та Ubuntu

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

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


1
Це питання є прикордонною програмною рекомендацією, яка, як правило, не використовується Super User . Спробуйте перефразувати його, щоб задати основне запитання: "Як я можу автоматично вносити зміни та натискати з git repo, коли файли додаються / видаляються / змінюються?"
Darth Android

@DarthAndroid, відповідно до FAQ, це питання добре, як і зараз. ОП не просить покупок чи покупки порад.
ephsmith

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
Теган Снайдер

+1 - я спробував, fswatchпрочитавши вашу відповідь. Відмінна утиліта - дуже схожа на inotifyLinux і використовує рідну fsevent
версію

2

Одним із варіантів було б просто використовувати запуск. Збережіть такий список властивостей, як такий ~/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>

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

launchctl unload $path && launchctl load $path застосовує зміни до списку.

Див. man launchdТа man launchd.plistдля отримання додаткової інформації.


Цікавий підхід. Я погляну на це і повернуся до вас. Дякуємо за відгук.
Теган Снайдер

Цей метод безумовно має свої обмеження. Ви не можете виявити зміни в папках переглянутих папок. Ця методика також не каже вам, у якому файлі відбулася подія (новий файл, модифікація, видалення тощо) - лише те, що в траєкторії відбулася подія.
Воломіке
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.