Überwachen Sie einen Ordner OSX auf Dateiänderungen und führen Sie dann ein Bash-Skript aus [duplizieren]

9

Mögliches Duplikat:
Beobachten Sie das Dateisystem in Echtzeit unter OS X und Ubuntu

Ich suche nach einer effizienten Methode zum Überwachen eines lokalen Verzeichnisses in OSX. Wenn in diesem Verzeichnis Dateien geändert wurden, führen Sie ein Bash-Skript aus, um die Dateien an github zu übergeben.

Gibt es empfohlene Tools zum Überwachen eines Verzeichnisses auf Dateiänderungen und zum Auslösen einer Aktion, z. B. eines Bash-Skripts?

Tegan Snyder
quelle
1
Diese Frage wie besehen ist grenzwertig eine Software - Empfehlung, die nicht allgemein auf erlaubt Super User . Versuchen Sie es neu zu formulieren, um Ihre Stammfrage zu stellen: "Wie kann ich automatisch Änderungen festschreiben und einen Push von einem Git-Repo senden, wenn Dateien hinzugefügt / gelöscht / geändert werden?"
Darth Android
@DarthAndroid, laut FAQ ist diese Frage in Ordnung. Das OP bittet nicht um Einkäufe oder Kaufberatung.
Ephsmith
1
@eph Das OP bittet um Empfehlungen für etwas, das eher vom Thema abweicht. Das Hauptproblem ist jedoch, dass sie ihr Problem nicht erklären und nur nach ihrer versuchten Lösung fragen.
Slhck
Das Problem ist einfach. Überwachen Sie ein Verzeichnis auf Änderungen und übertragen Sie diese Änderungen in ein Repository. Es ist alles in der Frage des OP. Der von Ihnen angegebene Link hat die Antwort. Guter Anruf.
Ephsmith

Antworten:

17

Verwenden von fswatch aus Ihrem Repository:

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

In diesem einfachen Beispiel werden nur Änderungen an Dateien abgefangen, die sich bereits im Repository befinden.

Pierre Carrier
quelle
Dies kann mit Ordneraktionen geschehen, die in OS X integriert sind. Die Antwort finden Sie über den Link, den slhk oben angegeben hat.
Ephsmith
1
Sie können Ihre Antwort erweitern, indem Sie ein Beispiel hinzufügen, in dem erläutert wird, was das OP erreichen möchte. Das einfache Posten eines Links wird nicht empfohlen.
Slhck
Das sieht ermutigend aus. Ich denke, ich könnte laufen ./fswatch / some / dir ./some/dir/bash_script.sh
Tegan Snyder
+1 - Ich habe es versucht, fswatchnachdem ich deine Antwort gelesen habe. Ausgezeichnetes Hilfsprogramm - sehr ähnlich zu inotifyLinux und verwendet OS X 'nativefsevent
CWD
2

Eine Möglichkeit wäre, einfach launchd zu verwenden. Speichern Sie eine Eigenschaftsliste wie diese unter ~/Library/LaunchAgents/com.superuser.445907.plistund laden Sie sie mit launchctl load ~/Library/LaunchAgents/com.superuser.445907.plistoder durch Abmelden und erneutes Anmelden.

<?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 registriert nur Änderungen an Dateien, wenn diese atomar gespeichert oder bei jedem Speichern gelöscht und neu erstellt werden. Die meisten OS X-Anwendungen führen standardmäßig atomare Speichervorgänge durch, zum Beispiel TextMate und vim jedoch nicht. Änderungen in Unterordnern von überwachten Ordnern werden nicht erkannt.

launchctl unload $path && launchctl load $path Wendet Änderungen auf eine Plist an.

Siehe man launchdund man launchd.plistfür weitere Informationen.

Lri
quelle
Interessanter Ansatz. Ich werde es mir ansehen und mich bei Ihnen melden. Danke für die Rückmeldung.
Tegan Snyder
Diese Methode hat definitiv ihre Grenzen. Sie können keine Änderungen in Unterordnern von überwachten Ordnern erkennen. Diese Technik sagt Ihnen auch nicht, welche Datei ein Ereignis hatte (neue Datei, Änderung, Löschung usw.) - nur, dass der Pfad ein Ereignis hatte.
Volomike