Ordner und Dateien automatisch online synchronisieren

Ordner und Dateien automatisch online synchronisieren…

…in einer Apple-Umgebung.

Wenn es darum geht, viele Dateien mit sich ständig aktualisierenden Inhalten, im Internet zum herunter laden anzubieten, sollte das automatisch und möglichst im Hintergrund ablaufen. Das heisst: sobald eine entsprechende Datei geändert/hinzugefügt/gelöscht wird, sollte das Hochladen/Synchronisieren automatisch erfolgen. Gleiches Spiel bei Ordnern (Verzeichnissen).

Wie kann man also Ordner und Dateien automatisch online synchronisieren? Und das automatisch, sobald eine Datei geändert oder neu zu einem Verzeichnis hinzugefügt wird?

Händisch ist das sehr aufwendig und Zeit raubend.

Nach einigen Tests mit CaptainFTP und dem zusätzlichen Programm CrowzNest (überwacht Ordner und lädt im Hintergrund mit CaptainFTP die Dateien auf den FTP-Server); Mac OS X Ordnerüberwachung mit gekoppeltem AppleScript, Automator, usw. …

…bin ich bei folgender Lösung gelandet. Alles andere funktionierte nie so, dass es nicht dauernd kontrolliert und neu gestartet werden musste. Also sehr unzuverlässig.

[CaptainFTP und seine Kompagnons gibt es mittlerweile (2022) schon gar nicht mehr.]

Was passiert während des Arbeitsablaufs (Workflow)? Hier ein kurzer Überblick:

  • per Launchd-Services wird der entsprechende Ordner und/oder die Datei überwacht
  • ein AppleScript wird bei Änderungen des Ordners oder der Datei gestartet
  • Transmit lädt die Dateien auf den FTP-Server hoch
  • im Kundenbereich organisiert ein Skript die Darstellung (Auflistung) und das Herunterladen der Dateien

Wie prüft man mit den Launchd-Services Ordner und Dateien auf Änderungen?

Das funktionierte für mich am besten mit dem Programm LaunchControl (eigentlich kostenpflichtig; funktioniert aber erstmal auch ohne zu bezahlen). Es gibt noch Lingon. Das hat leider nicht so gute Einstellungsmöglichkeiten per grafischer Oberfläche, und funktioniert auch nicht so zuverlässig. Jedenfalls in der Umgebung in der der Arbeitsablauf eingerichtet werden musste.

Man kann die Datei natürlich auch von Hand anlegen/bearbeiten. Wer es möchte … mir war der Weg mit benutzerfreundlicher Klickoberfläche lieber.

Über LaunchControl habe ich dann Launchd-Jobs angelegt, die die entsprechenden Verzeichnisse oder eine einzelne Datei auf Änderungen prüft. Sobald eine Datei geändert, hinzugefügt oder auch nur das Verzeichnis geöffnet wird, startet die Synchronisierung.

Über Watch paths kann man Verzeichnisse und Dateien überwachen. Eine Überwachung am besten wie im unteren Bildschirmfoto gezeigt zusammen stellen. Allerdings hatte ich nach einigen Tests festgestellt, dass es durchaus auf einem anderen System leicht anders aussehen kann.

Unter Mac OS X Snow Leopard und auch El Capitan lief und läuft (2022) es immer noch wie unten gezeigt am besten und eben zuverlässigsten.

Bildschirmfoto 2022 02 11 um 11.56.09

Ganz Wichtig!
Bei Program to run nicht auf die .app verlinken. Den Paketinhalt anzeigen lassen und auf das Applet darin verlinken. Das AppleScript kann hieraus nicht direkt gestartet werden.


Die Konfiguration mit Lingon sieht ähnlich aus

Bildschirmfoto 2022 02 11 um 09.54.54
Bildschirmfoto 2022 02 11 um 09.55.06

Die Synchronisierung

Über die Launchd-Services wird jeweils ein AppleScript gestartet, welches Transmit (FTP-Client) mit der Synchronisation der Dateien auf dem Server beauftragt. Es werden auch nur die Dateien hochgeladen, die verändert wurden. Das funktioniert mit Transmit ganz hervorragend.

Transmit benutze ich auch, wenn es darum geht, diverse Skripte im Internet zu aktualisieren. Der Abgleich, was alt aufm Server ist, und gegen lokale Dateien ausgetauscht werden muss, funktioniert wirklich wunderbar. Ist zum Beispiel bestens dazu geeignet, CMS-Skripte aktuell zu halten, die keine integrierte Aktualisierungs-Option eingebaut haben.

sync

Das AppleScript

Die ursprüngliche Version hab ich mir hier besorgt. Das funktioniert so schon richtig gut. Auch als Ordneraktion.

Für meinen Fall musste ich es aber nocht etwas anpassen;

  • das Skript soll prüfen, ob ein gewisses Server-Volume schon vorhanden (auf dem Schreibtisch angemeldet) ist
  • wenn nicht: das Volume holen, etwas warten und das Skript neu starten
Bildschirmfoto 2022 02 11 um 12.24.15

Mein AppleScript-Wissen war/ist leider etwas eingerostet. Ich weiss nicht, ob man es mit den eingebauten Schleifen nicht noch etwas optimieren kann. Wer mag kann das. Freu mich über Tipps und/oder eine neue Version des Skriptes. Ansonsten kann jeder das vorhandene Skript benutzen/erweitern/verbreiten wie er grad Lust und Zeit hat.

Sofern das unter der GNU General Public Lizenz erfolgt.

Oder eben die Einstellungen (sind im Skript markiert) anpassen und selbst verwenden.

Hier kann man es herunter laden (die neue Version 1.1 ist seit dem 2. Februar 2016 online; neu ist eine zusätzliche Schleife, die verhindert, dass das Server-Volume zu oft geholt wird).

Vielleicht hilft es ja bei der einen oder anderen Problemlösung.

Manchmal kommt es zu Problemen (wofür ich keine Problemlösung im Skript habe):

  • wenn das Volume sich nicht einhängen (anmelden) lässt und eine zu lange Schleife entsteht (ich denke, das habe ich mit der Version 1.1 behoben)
  • die Verbindung zu einem FTP-Server nicht funktioniert

Aber meistens (in 97% der Fälle) läuft es zuverlässig. Bei den oben genannten Problemen hilft etwas Geduld. Die Skripte beenden, Transmit ebenso. Etwas warten, denn der Prozess läuft ja im Hintergrund, und sollte bald erneut starten. Auf jeden Fall zu dem Moment, sobald etwas in den angegebenen Pfaden verändert wird.


Dieses Skript und Ideen zu den LaunchdJobs werden in der Hoffnung zur Verfügung gestellt, dass es hilfreich und nützlich sein kann. Ohne Garantie. Also am besten nicht gleich in laufende Arbeitsabläufe integrieren. Besser in einer Testumgebung.


-- AppleScript - Transmit - synchronize a local directory to an FTP directory
-- Copyright (C) 2010 Lincoln Mullen / (C) 2022 Marco Dinkel
-- Released under the GPL. See README.

doit(true)
on doit(theTransmit)
	if theTransmit then
		
		tell application "System Events" to set diskNames to name of every disk
		
		if "daten" is in diskNames then
			
			-- display dialog "Startbereit!"
			
			tell application "Transmit"
				-- Prevent interactive alerts from popping up during script execution
				set SuppressAppleScriptAlerts to true
				
				-- CONFIGURATION - edit what you need to below
				-- replace "LincolnMullen" with the name of your favorite
				set remoteFavorite to item 1 of (favorites whose name is "Upload-Lesezeichen")
				-- replace everything in between "" to the remote path you want to sync TO
				set remotePath to "/wp-content/uploads/"
				-- replace everything in between "" to the local path you want to sync FROM
				set localPath to "/Users/admin/Documents/"
				-- END CONFIGURATION
				
				-- set a variable naming all the skip rules that are enabled in Transmit preferences
				set myRules to (skip rules whose enabled is true)
				
				-- Create a new window (and thus a single tab) for this script
				tell current tab of (make new document at end)
					
					-- Go into the local and remote folders that we want to sync.
					change location of local browser to path localPath
					connect to remoteFavorite
					change location of remote browser to path remotePath
					
					-- Run a sync from the current local folder to the current remote folder
					synchronize local browser to remote browser using skip rules myRules with automatically determine time offset
					-- Close the current window
					close
				end tell
			end tell
			
		else
			
			-- es muss erst die Windows-Platte geholt werden
			-- wenn sie nicht schon da ist und nicht mehrfach geholt werden soll
			-- mount volume "afp://NAS01._afpovertcp._tcp.local/windows_daten"
			mount volume "smb://file-srv/daten"
			
			-- Sicherheitspuffer: bis die Platte auf dem Schreibtisch erscheint
			delay 30
			
			-- Neustart des Skriptes
			doit(theTransmit)
			
		end if
		
	else
		
		-- Beenden
		doit(false)
		
	end if
	
end doit

Das ist nur ein Weg, wie man Ordner und Dateien automatisch online synchronisieren kann…

…es gibt noch einige weitere Möglichkeiten: mit GoodSync kann man sich z. B. auch recht schnell einen stabilen Workflow zusammen klicken, der lokale Verzeichnisse mit so allerhand Online-Verzeichnissen und Wolken synchronisiert…


Der Beitrag und das AppleScript wurden am Freitag, 11. Februar 2022 aktualisiert.

Und der Workflow funktionieret unter macOS Catalina und Transmit in der Version 5 weiterhin tadellos.

Ausprobiert: Remix OS

2016-01-16_um_20-29-41

Am Samstag hab ich mir Remix OS von Jide herunter geladen. Ich wollte das unbedingt mal ausprobieren. Vor allem auch wegen den Android-Programmen aufm Rechner.

Nach anfänglichen Problemen hab ich es dann doch auf einem USB-Stick installiert bekommen. Auf einem, der sogar etwas langsamer als die geforderten 20 MB/S ist.

Den ersten Installations-Versuch bin ich ziemlich faul angegangen, und hab versucht mit dem Festplatten-Dienstprogramm von Mac OS X, die Image-Datei auf den USB-Stick zu spielen. Hat auch alles ganz gut funktioniert. Nur bin ich beim Startversuch vom USB-Stick nicht über den Bildschirm mit dem Remix OS-Logo hinaus gekommen.

Na ja. Dann hab ich es mit UNetbootin versucht. Da hatte der Startvorgang immer mit folgendem Stand aufgehört. Nach drücken irgendeiner Taste, bin ich wieder zur Auswahl, wie ich denn Remix OS starten möchte (Gastzugang oder mit Speichern), zurückgeworfen worden. Dauerschleife sozusagen.

2016-01-16_um_17-31-07

Dann hab ich einfach das Remix OS USB Tool per CrossOver in eine Windows-Flasche gegossen.

2016-01-16_um_18-00-48

Das Image dann mit diesem Werkzeug auf den USB-Stick transferiert.

2016-01-16_um_18-00-33

Neustart vom USB-Stick per Efi.

2016-01-16_um_17-30-28

Danach kamen einige Anzeigen, was gefunden wurde, was eingerichtet wird und so weiter.

2016-01-16_um_18-46-40

Hat ne ganze Weile gedauert. Vielleicht ist da auch der etwas zu langsame Stick dran schuld gewesen.

2016-01-16_um_18-46-55

Aber irgendwann ging es dann doch weiter.

2016-01-16_um_20-29-32

Und ich wurde zur Einrichtung des Systems gebeten.

2016-01-16_um_19-10-43

Und landete irgendwann im Remix OS … per USB-Stick aufm Mac.

2016-01-16_um_20-22-02

Da ich kurz vorher ein Video bei Facebook hochgeladen hatte, war ich neugierig auf die Reaktionen drauf, und hab mit dem eingebauten Webbrowser von Remix OS meinen Stream aufgerufen.

2016-01-16_um_20-19-52

Es gab aber kaum Reaktionen. Kunst geht dann doch meistens zwischen all den Katzenbildern unter … vor allem bei so unbekannten „Künstlern“ wie mir.

Aber Remix OS macht irgendwie Spass. Ich bin gespannt wie es weiter geht.

Es läuft recht flüssig und ohne größere Probleme. Da bin ich mal gespannt, wie es auf meinem Pine A64 laufen wird.

Ich, der Mac und das Android-Smartie

Ich habe mich ja lange gegen dieses Smartphone-Gedönse und -Gelöte gewehrt. Jetzt hab ich doch so einen Androiden (seit Herbst). Auch noch von Sony.

Hoffentlich werde ich mich zurück halten können, und nicht zum Allzeit-Wischer werden.

Der Grund war letztlich die schlechte Qualität diverser iPods. Wie oft die zur Reparatur mussten, oder gar selbst repariert werden mussten, ging mir echt auf die Nerven. Vor allem bei den Preisen. Auch die geplante Entwertung diverser Modelle, durch neue Software-Versionen, die einfach nicht mehr vom Gerät unterstütz werden. Obwohl das erst 2 Jahre oder so alt war.

Ein weiterer Grund war das Geschleppe. Zu all meinem Foto-Equipment, wollte ich nicht noch den iPod und das Mobiltelefon zusätzlich dabei haben.

Ich werde berichten.

Auch über das Zusammenspiel und die Integration mitm Mac.

Zu Ihrer Sicherheit ist Safari tief mit dem Betriebssystem verwurzelt…

Das ist echt witzig irgendwie:

Für iTunes bekomme ich weiterhin Aktualisierungen auf meinem „alten“ Snow Leopard (10.6.8). Für Safari aber ist es schon lange vorbei. Da passiert nichts mehr. Da muss ich schon das gesamte Betriebssystem aktualisieren, um da eine neuere Version zu bekommen. Aber will ich das? Nur wegen der vermeintlichen Sicherheit … ?

Na ja, iTunes muss aktuell gehalten werden. Schliesslich wird über den Store zusätzlicher Umsatz generiert. Schon klar. Und das muss jedem Mac-User weiterhin ermöglicht werden. So lang wie möglich.

Mit Safari kann ich auch fremdgehen.

Softwareaktualisierung

Wenn ich das Betriebssystem aktualisieren würde, dann würde das noch sehr viel mehr hinter sich herziehen. Zig andere Programme müssten aktualisiert werden. Viele dann eben auch kostenpflichtig (was nicht unbedingt das Problem ist).

Aber warum soll ich mir den Stress gönnen? Mit meiner jetzigen Konfiguration und Hardware kann ich alles machen was ich möchte … und auch kann. Den vollen Funktionsumfang der installierten Programme nutze ich ja eh nicht. Warum also irgendwelchen neuen Funktionen hinterher hecheln? Nur um mit dabei zu sein.

Schliesslich ist das auch ein Teufelskreis. Irgendwie. Nach weiteren Aktualisierungen des Betriebssystems – in der Zukunft – ist dann auch mein jetziger Rechner nicht mehr im Stande das System geschmeidig laufen zu lassen. Dann ist neue Hardware nötig … usw.

Safari

Bleibt der Safari eben alt und es wird Firefox verwendet. Bis die mich auch aussperren. Dann wird ganz dickköpfig der alte Rechner vom Internet getrennt und ein nettes Android-Tabelt wird angeschafft, um im Internet unterwegs zu sein.

Das Mac OS X ist immer noch eins der tollsten Betriebssysteme. Ganz klar. Die Politik von Apple ist aber schon etwas länger mit einem G’schmäckle behaftet.

Und andere holen schwer auf. Auch was die Benutzerfreundlichkeit angeht. Unter Ubuntu gibt es auch dieses Aha-Erlebnis der automatischen Hardware-Erkennung. Und viele andere angenehme Überraschungen ebenso.

Als ich auf meinem Mac Ubuntu installierte, hat es z.B. all meine Netzwerkeinstellung von der Mac-Partition übernommen. Das nur so am Rande.

In Zukunft werde ich jedenfalls drauf achten, egal was ich mir kaufen werde, es auf mehreren Plattformen lauffähig ist. Soft- wie Hardware. Zumindest kompatibel für Unix und Mac.

Da habe ich mir in der Vergangenheit die ein oder andere Einbahnstraße gelegt.