Monitoruj folder OSX pod kątem zmian plików, a następnie uruchom skrypt bash [duplikat]

10

Możliwe duplikaty:
Oglądaj system plików w czasie rzeczywistym na OS X i Ubuntu

Szukam wydajnej metody monitorowania lokalnego katalogu w OSX i jeśli jakieś pliki zostały zmienione w tym katalogu, uruchom skrypt bash, aby zatwierdzić pliki w github.

Jakieś zalecane narzędzia do monitorowania katalogu pod kątem zmian plików, a następnie wyzwalania akcji, np. Skryptu bash?

Tegan Snyder
źródło
1
To pytanie jest na marginesie zaleceniem oprogramowania, które na ogół nie jest dozwolone w przypadku superużytkownika . Spróbuj przeredagować go, aby zadać swoje główne pytanie: „Jak mogę automatycznie zatwierdzać zmiany i wypychać z repozytorium git, gdy pliki są dodawane / usuwane / zmieniane?”
Darth Android,
@DarthAndroid, zgodnie z FAQ, to pytanie jest w porządku w obecnej formie. OP nie prosi o zakupy ani porady dotyczące zakupu.
ephsmith,
1
@eph OP prosi o zalecenia dotyczące czegoś, co jest raczej nie na temat. Głównym problemem jest jednak to, że nie wyjaśniają swojego problemu i proszą jedynie o próbę rozwiązania.
slhck
Problem jest prosty. Monitoruj katalog pod kątem zmian i zatwierdzaj je w repozytorium. Wszystko jest w pytaniu PO. Podany link zawiera odpowiedź. Dobra decyzja.
ephsmith

Odpowiedzi:

19

Korzystanie z fswatch z repozytorium:

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

Ten prosty przykład przechwytuje tylko zmiany w plikach znajdujących się już w repozytorium.

Pierre Carrier
źródło
Można to zrobić za pomocą akcji folderów wbudowanych w OS X. Zobacz odpowiedź za pomocą linku podanego powyżej przez slhk.
ephsmith
1
Możesz rozszerzyć swoją odpowiedź, dodając przykład wyjaśniający, co PO chce osiągnąć. Publikowanie linku nie jest zalecane.
slhck
To wygląda zachęcająco. Myślę, że mógłbym uruchomić ./fswatch / some / dir ./some/dir/bash_script.sh
Tegan Snyder
+1 - próbowałem fswatchpo przeczytaniu twojej odpowiedzi. Doskonałe narzędzie - bardzo podobne do systemu inotifyLinux i korzysta z natywnego systemu OS Xfsevent
cwd
2

Jedną z opcji byłoby po prostu użycie uruchomionego. Zapisz listę właściwości w ten sposób jako ~/Library/LaunchAgents/com.superuser.445907.plisti załaduj ją przy pomocy launchctl load ~/Library/LaunchAgents/com.superuser.445907.plistlub wylogowując się i ponownie logując.

<?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>

Uruchomione rejestruje zmiany w plikach tylko wtedy, gdy są one zapisywane atomowo lub usuwane i odtwarzane za każdym razem, gdy są zapisywane. Większość aplikacji OS X domyślnie wykonuje zapisy atomowe, ale na przykład TextMate i vim nie. Zmiany w podfolderach obserwowanych folderów nie są wykrywane.

launchctl unload $path && launchctl load $path stosuje zmiany do listy.

Zobacz man launchdi man launchd.plistwięcej informacji.

Lri
źródło
Ciekawe podejście Spojrzę na to i skontaktuję się z tobą. Dzięki za opinie.
Tegan Snyder,
Ta metoda zdecydowanie ma swoje ograniczenia. Nie można wykryć zmian w podfolderach obserwowanych folderów. Ta technika również nie mówi ci, który plik miał zdarzenie (nowy plik, modyfikacja, usunięcie itp.) - po prostu, że ścieżka miała zdarzenie.
Volomike