Gibt es eine einfache Möglichkeit, einen (Terminal-) Befehl jedes Mal automatisch auszuführen, wenn eine Datei in einem bestimmten Ordner geändert wird?
Dies sollte über die Befehlszeile oder eine in das System integrierte Anwendung möglich sein, keine Anwendungen von Drittanbietern.
Irgendwelche Ideen?
macos
terminal
command-line
Louis B.
quelle
quelle
Antworten:
Speichern Sie eine Eigenschaftsliste wie folgt
~/Library/LaunchAgents/test.plist
:Der Agent kann mit
launchctl load ~/Library/LaunchAgents/test.plist
oder durch Abmelden und erneutes Anmelden geladen werden . Um Änderungen zu übernehmen, muss die Plist entladen und geladen werden .Tilde
~/
extension ( ) funktioniert standardmäßig in WatchPaths. EnableGlobbing fügt Platzhalter- und Tilde-Erweiterungen für ProgramArguments hinzu, hat jedoch keine Auswirkungen auf Program oder WatchPaths.Wenn eine überwachte Datei innerhalb von zehn Sekunden nach dem letzten Aufruf geändert wird, wird eine folgende Meldung zu system.log hinzugefügt:
Eine Möglichkeit, die Nachrichten zu entfernen, besteht darin
sleep 10
, am Ende von Skripten etwas hinzuzufügen . Das Setzen von ThrottleInterval auf 10 hilft nicht.Änderungen in Unterordnern von überwachten Ordnern werden nicht erkannt.
Siehe
man launchd
undman launchd.plist
für weitere Informationen.quelle
entr (1) ist ein Dienstprogramm zum Ausführen von Befehlen, wenn sich Dateien ändern. Es liest eine Liste von Dateien auf STDIN und verwendet kqueue (2) , um Abfragen zu vermeiden.
Beispiel:
quelle
Sie können Ordneraktionen verwenden, mit denen Sie (Automator-) Skripts ausführen können, wenn sich der Inhalt eines Ordners ändert. Soweit ich weiß, verfügt Automator über eine Vorlage, mit der Sie auf einfache Weise eine neue Ordneraktion erstellen und an den gewünschten Ordner anhängen können. Wenn Sie eine Aktion "Shell-Skript ausführen" hinzufügen, sollten Sie nur den gewünschten Effekt erzielen.
quelle
Ordneraktionen können problemlos ausgelöst werden, wenn eine Datei hinzugefügt oder geändert wird.
Wenn Ihre Definition von geändert jedoch das Löschen einer Datei umfasst, erkennen OSX-Ordneraktionen nicht, ob eine Datei entfernt wurde.
Um die Frage zu beantworten:
Laden Sie die FileWatcher-Abhängigkeiten von hier herunter: https://github.com/eonist/swift-utils
Machen Sie sich mit dem schnellen Laufen in der Befehlszeile vertraut: http://krakendev.io/blog/scripting-in-swift
Verwenden Sie diesen Code, um einen Ordner anzusehen.
Code:
quelle
Automator verfügt über einen Workflow, der als "Ordneraktion" bezeichnet wird und automatisch ausgeführt wird, wenn einem Ordner etwas hinzugefügt wird. Erstellen Sie eine und verwenden Sie die Aktion "Shell-Skript ausführen".
quelle
Vielleicht möchten Sie so etwas ausprobieren:
quelle
ls -l
Dateiänderungen abfangen.