Mit Automator nach Ordner- / Dateiänderungen suchen?

9

Gibt es eine Möglichkeit, einen Ordner / eine Datei auf Änderungen zu überprüfen (einschließlich Hinzufügen von Dateien, Löschen von Dateien, Ändern von Dateien, ...)? Die 'Ordneraktion' in Automator überprüft nur, ob Dateien neu hinzugefügt wurden.

Saneef
quelle
Ich denke nicht, dass dies mit Automator von Haus aus möglich ist. Sie könnten wahrscheinlich etwas mit einigen Skripten tun (und den Skripting-Aktionen, wenn Sie sie benötigen, um in Automator zu funktionieren), aber Sie müssten den Workflow ausführen, um Änderungen seit der letzten Ausführung zu erkennen.
Jtjacques
3
Hast du dir launchd angesehen? vgl. stackoverflow.com/questions/1515730/…
kraymer

Antworten:

5

Sie können mit dem folgenden Befehl eine Aktion "Shell-Skript ausführen" hinzufügen:

find <directory> -newermm <reference_file>

Dadurch erhalten Sie alle Dateien und Verzeichnisse <directory>, die sich seit der letzten Änderung von geändert haben <reference_file>. Stellen Sie einfach sicher, dass Sie die Änderungen <reference_file>jedes Mal ändern, wenn Sie das Automator-Skript ausführen.

man findWeitere Optionen finden Sie auch auf der Seite Handbuch suchen ( im Terminal eingeben ). Die Suche ist sehr leistungsfähig und die weitere Verfeinerung Ihrer Suche ist normalerweise eine Frage einiger zusätzlicher Optionen. ZB nur nach Verzeichnissen suchen, die geändert wurden nach <reference_file>:

find <directory> -type d -newermm <reference_file>

Wenn die mit OSX findutilsgelieferte Version nicht ausreicht, können Sie auch die mitgelieferte Version (Brew, Macports usw.) ausprobieren, die etwas mehr Funktionen haben sollte.

m000
quelle
1

Ich kenne keine Möglichkeit, dies mit Automator zu tun, aber es gibt eine App im App Store namens Folder Watch, die möglicherweise das tut, was Sie verlangen.

Kris
quelle
1

Als ich das letzte Mal nachgesehen habe, verwendet Automater Applescript im Hintergrund, um Ihre Aktionen zu skripten. Applescript hat nicht viel Tiefe. Es kann zwar die Liste der Dateien in einem Verzeichnis abrufen (und Sie können daher herausfinden, wann etwas gelöscht wird), aber ich glaube nicht, dass es Änderungen an einer Datei berechnen kann.

Was Sie wirklich nutzen müssen, sind Dateisystembenachrichtigungen. Und da das ein Biest ist, würde ich Kraymers Rat befolgen und launchd verwenden. Es verfügt über Hooks, die immer dann ausgeführt werden können, wenn der Inhalt eines Ordners geändert wird. Lingon (siehe auch die veraltete SourceForge-Seite ) ist eine großartige Anwendung, um Leuten zu helfen, in den Start zu springen. Sie können Ihr Automator-Skript / Ihre Automator-Anwendung schreiben, um alles zu tun, was Sie vorhatten, als Ihr Verzeichnis geändert wurde, und einfach die Task "launchd" aufrufen.

Staros
quelle
1

Sie können eine frühere Antwort von mir überprüfen , aber es klingt wie Sie wollen

fs_usage -f filesys  

Launchd ist nicht der richtige Weg, um Dateiänderungen vorzunehmen. Fs_usage verwendet den zugrunde liegenden Computer, der Spotlight unterstützt.

EDIT: Ich bin hier völlig falsch. Launchd verfügt über genau die erforderliche Funktionalität, dh: eine Datei oder ein Verzeichnis ändern.

Sie erstellen eine .plist-Datei.

Schrei "XML SUX FOR CONF FILES!" ( Macht es wirklich. )

und Sie möchten einen oder beide der folgenden Schlüssel in Ihrem Startjob verwenden.

WatchPaths <array of strings>
 This optional key causes the job to be started if any one of the listed
 paths are modified.

 QueueDirectories <array of strings>
 Much like the WatchPaths option, this key will watch the paths for modi-
 fications. The difference being that the job will only be started if the
 path is a directory and the directory is not empty.
kichernd
quelle