Benötigen Sie Hilfe beim Erstellen eines AppleScript, das ausgeführt wird, wenn sich der Inhalt eines Ordners ändert


2

Ich würde mich sehr über Unterstützung bei den folgenden Themen freuen.

Mein Szenario:

Ich habe eine Mac-App, die RTF-Dateien generiert. Ich habe eine Android-App, die sich mit MultiMarkdown- / Markdown-Dateien befasst.

Die Mac-App funktioniert mit Projekten, die eine beliebige Anzahl von Dateien enthalten. Es kann die Dateien in einem bestimmten Projekt automatisch mit einem Ordner synchronisieren. Im Wesentlichen werden bei jeder Synchronisierung (beim Öffnen und Schließen sowie manuell) eine Reihe von Dateien in den Ordner gestellt. Alle Änderungen an diesem Ordner werden automatisch mit meinem Android-Gerät synchronisiert.

Ich muss sie jedoch vorher in .mmd-Dateien konvertieren und wieder in RTF konvertieren, wenn die Dateien vom Android-Gerät geändert (oder neu) eingehen.

Also hier ist was ich vorhabe. Ich möchte die Einstellungen so vornehmen, dass beim Synchronisieren von Dateien von der Mac-App in den Zielordner diese Dateien automatisch von RTF in MMD konvertiert werden. Ich habe bereits die Skripte, die die eigentliche Konvertierung durchführen. UND wenn sich die MMD-Dateien ändern, werden sie automatisch in RTF-Dateien konvertiert. Ich habe auch ein Skript dafür.

Die Fragen, die ich habe, sind diese:

  1. Wie kann ich einen Ordner automatisch auf Änderungen an seinem Inhalt überwachen und ein Skript ausführen, wenn sich Dateien in diesem Ordner ändern?
  2. Wie könnte ich das in beide Richtungen funktionieren lassen, ohne alles in eine Endlosschleife zu werfen? Zuerst dachte ich, ich könnte Folgendes tun:

Zweiwege-Konvertierung:

  1. Erstellen Sie zwei Ordner auf dem Mac. Eine für RTF-Dateien, die andere für MMD-Dateien.
  2. Richten Sie die Mac-App so ein, dass ihre Daten aus dem RTF-Ordner heraus und wieder hinein synchronisiert werden
  3. Stellen Sie den Mac auf das Android-Synchronisierungssystem (Dropbox, Bittorrent Sync usw.) ein, um den Inhalt des MMD-Ordners mit einem Ordner auf dem Android-Gerät zu synchronisieren.
  4. Wenn sich der Inhalt von RTF-Ordnern ändert, konvertieren Sie die Dateien in MMD und legen Sie die Ausgabe im MMD-Ordner ab. Und umgekehrt.

Offensichtlich führt dies jedoch zu einer Endlosschleife, da jede Aktion endlos die umgekehrte Aktion auslöst.

Ein möglicher Weg, um diese Endlosschleife zu umgehen, könnte sein:

  • Dem RTF-Ordner ist Skript R zugewiesen. Wenn sich der Inhalt ändert, wird Skript R ausgeführt.
  • Dem MMD-Ordner ist Skript M zugewiesen. Wenn sich der Inhalt ändert, wird Skript M ausgeführt.
  • Wenn eine Änderung im RTF-Ordner festgestellt wird, deaktiviert Skript R als erstes das Auslösen von Skript M. Das letzte, was Skript R vor dem Beenden tut, ist, Skript M wieder zu aktivieren. Auf diese Weise „merkt“ M nicht, dass sich der Ordnerinhalt geändert hat, während R seinen Inhalt mit frisch konvertierten Dateien aktualisiert hat.
  • Das gleiche würde umgekehrt gelten.

Aber vielleicht gibt es einen besseren Weg?

Ich möchte gerne mehr über Skripterstellung erfahren und dabei dieses Problem lösen.

Gibt es Leute mit realisierbaren Ideen, wie ich das erreichen kann, was ich mir erhoffe?

Antworten:


3

Ich würde ein Skript erstellen, das beide Ordner überwacht. Meine bevorzugte Sprache ist Python. AppleScript ist für diese Art von Vorgang nicht besonders gut geeignet. Die Grundidee ist, auf FSEvents in den beiden fraglichen Ordnern zu warten. Wenn einer auftritt, heben Sie schnell die Planung des Ereignisstroms für den anderen Ordner auf, führen einige Konvertierungs- und Synchronisierungsvorgänge durch und planen dann den zuvor nicht geplanten Ereignisstrom neu.

Das hier heruntergeladene fertige Skript mit den geänderten Versionen der von Ihnen gezeigten Skripte. Die MacFSEvents-Installation erfolgt jetzt automatisch: https://www.dropbox.com/s/oylvewk90ezwb3s/File%20Sync.app.zip?dl=1

Hier sind die Schritte, um es zu verwenden:

Extrahieren Sie das Applet, klicken Sie mit der rechten Maustaste darauf, wählen Sie "Paketinhalt anzeigen", öffnen Sie "Inhalt" und "Ressourcen" und bearbeiten Sie die darin enthaltene Liste mit Ihren RTF- und MMD-Ordnerpaarungen. Sie können so viele Paare angeben, wie Sie benötigen, um miteinander synchronisiert zu bleiben. Halten Sie sich einfach an das Format, das ich in der Liste verwendet habe: Ein Array pro Paar mit jeweils zwei Elementen, wobei das erste Element der Pfad zu ist der RTF-Ordner, der zweite ist der Pfad zum MMD-Ordner. Sie sehen dies, wenn Sie die Pliste öffnen.

Dies sollte ohne Probleme funktionieren. Die Ordner werden nun auf Änderungen überwacht und die Dateien werden konvertiert und in den anderen Ordner übertragen.



Hallo Froggard. In Bezug auf das Problem, dass Pandoc Überschriften bei der (MMD>) HTML> RTF-Konvertierung nicht behandelt, hat jemand in den Pandoc-Foren vorgeschlagen, dafür XSLT zu verwenden. Er hat angeboten, ein paar Perl-Skripte zu schreiben, die das erledigen. Könnten wir das dann in ein Are-Applet integrieren?
Inspirednz

Auf jeden Fall
William T Froggard

1

Ich bin alles für Leute, die lernen, wie man Dinge schreibt , aber für den täglichen Gebrauch und die Flexibilität ist die Neuimplementierung von Teilen von Hazel by NoodleSoft für eine Allzwecklösung weniger leistungsfähig und effizient.

Hasel Icon klein

Nochmals ein großes Lob an Froggard und Inspired Life für die hervorragende Antwort und die praktische Frage.


Der Hauptzweck, den ich beim Schreiben von Skripten für Benutzer habe, besteht darin, meine Skripterfahrung und mein Wissen zu erweitern. Es ist mir persönlich egal, ob es eine Anwendung gibt, die das kann, da es Spaß macht, es selbst zu machen und es fehlerfrei funktionieren zu lassen. Heutzutage gibt es sehr wenig, was ich nicht schreiben kann, und da ich meine Fähigkeiten für die Arbeit, die ich mache, schärfen muss, lohnt es sich, mit diesen Dingen einen Schritt weiter zu gehen. Ich verstehe Ihre Besorgnis jedoch. Ich habe einige schrecklich gestaltete Skripte im Internet gesehen.
William T Froggard

@Froggard Ja - ich beantworte dies für alle Leute, die noch keinen Juckreiz haben. Ich möchte, dass auf der Website Dutzende von Fragen dazu gestellt werden, wie diese speziellen Anforderungen zu skripten sind, und dass nach einem bestimmten Tool gefragt wird. Python, AppleScript oder sogar das Einrichten von Hazel-Regeln für XYZ. Ich sollte mir wahrscheinlich die Zeit nehmen, dies zu lösen und dies in meinem Beitrag hier zu bearbeiten. Auch hier ist Heimwerken so wichtig und warum ich die Frage und die Antwort abgestimmt habe.
bmike

1
Bestimmt. Abhängig von den individuellen Anforderungen gibt es oft mehr als eine richtige Antwort.
William T Froggard

Danke bmike Ich bin damals auf die Idee gekommen, Hazel zu benutzen. Ich habe Hazel vor einigen Jahren auf meiner Maschine ... vor zahlreichen Betriebssystem-Upgrades. Ich dachte, ich müsste immer noch geeignete Skripte ausführen, und ich konnte auch nicht sofort erkennen, wie es mit der in dieser Situation erforderlichen bidirektionalen Überwachung von zwei Ordnern umgehen würde. Außerdem sind es 30 US-Dollar und eine weitere App, die ununterbrochen auf meinem Computer läuft, um nur diese eine Sache zu tun. Es schien, als wäre es vorbei. Wäre Froggard nicht so großzügig mit seiner Zeit umgegangen, hätte ich vielleicht etwas zusammen mit Hazel in die Mischung gehackt.
Inspirednz

Ich weiß es zu schätzen, dass Sie diesem Vorschlag zustimmen. Jemand anderes mit einem ähnlichen Problem, das es zu lösen gilt, könnte die Hazel-Route für ihn die beste Lösung sein.
Inspirednz
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.