Dateien vom Server in lokalen Ordner kopieren? - (Sync)

maccoX

Aktives Mitglied
Thread Starter
Dabei seit
15.02.2005
Beiträge
16.090
Reaktionspunkte
6.098
Folgende Situation:

Ich habe auf einem Server verschiedene Dateien in einem Unterordner. All diese Dateien müssen in einem bestimmten Ordner auf meinem Mac landen. Sind sie dort schon vorhanden, dann sollen sie keinesfalls neu geladen werden - am besten wär natürlich wenn noch erkannt wird ob die gleichnamige Datei auf dem Server neuer ist und dann die alte lokale ersetzt. Gibt es eine Datei auf dem Server nicht mehr, muss sie auch im lokalen Ordner gelöscht werden.

Also praktisch ein Sync-Prozess, der den Serverstand auf den Mac spiegelt.

Da das auf einem fremden Mac installiert wird ist aber wichtig, dass das FTP Passwort nirgends (unverschlüsselt) sichtbar ist (also auch kein Schlüsselbund zu dem der Besitzer ja Zugriff hätte) und er auch das zu syncende Verzeichnis nicht verändern kann - z.B. auf das Root Verzeichnis und dann meinen kompletten Serverinhalt bekommt.

Da das alles vermutlich sicherheitstechnisch etwas schwierig ist, währe es vielleicht besser, die Dateien werden einfach heruntergeladen wenn noch nicht vorhanden (ohne FTP) und dann in den entsprechenden Ordner verschoben. Welche Dateien das sind würde in einer xml stehn, aber die müsste dann halt auch noch ausgewertet werden ...

Ist so was mit Applescript möglich?
 
Den FTP-Zugriff ohne das Passwort irgendwo zu speichern halte ich für schwierig, dann müsstest du ja jedes mal das Passwort manuell eingeben. Aber du kannst doch den Schlüsselbund per Benutzerkennwort schützen, dann legst du dir halt einen eigenen Benutzer an und aktivierst den Passwortschutz beim Schlüsselbund, dann sieht der Benutzer das Passwort nicht. Den Sync würde ich mit einem Tool machen wie Sync2Folders oder CCC, das ist komfortabler. Gegebenenfalls das mounten des FTP-Shares lässt sich mit Applescript realisieren.

Das ganze ist natürlich auch als reines Applescript realisierbar, aber unnötig kompliziert, da es eigentlich ganz praktische Tools dafür gibt.
 
Tools fallen weg, da ich das auf mehreren Macs brauche und sich somit jeder Kaufbetrag summieren würde.


Hab mir das alles noch mal überlegt, eigentlich brauche ich nur folgendes:
Das Applescript muss eine .txt oder .xml einlesen können und alle dort enthaltenen http://myserver.de/ordner/dateix.xxx Dateien über http in einen lokalen Ordner speichern - das müsste doch machbar sein, oder?
 
Das geht relativ einfach:

Code:
set destPath to "/Users/Speicher/Pfad/"
tell application "TextEdit"
	open ":Pfad:Der:Text:Datei.txt"
	set URLList to every paragraph of text of document 1
	close document 1
	repeat with i in URLList
		set cd to "cd " & quoted form of destPath & "; curl -O " & quoted form of i
		do shell script cd
	end repeat
end tell

Das geht auch mit FTP. Brauchst du bei FTP einen Benutzernamen und Password, dann müssen die Pfade in der Textdatei diese enthalten (z.B. ftp://name:geheimwort@server.de/file.xxx) oder du ergänzt das im Skript.
 
Zuletzt bearbeitet:
Danke! Leider komm ich mit den Pfadangaben nicht klar...

Was muss ich denn jeweils auswählen, wenn ich vom Userordner ausgehen möchte? Ich bekomme immer die Meldung das Dokument xx konnte nicht geöffnet werden. Die Datei existiert nicht.

open ":User:<ich>:datei.txt" funktioniert nicht, wenn ich statt User Benutzer schreibe gehts auch nicht.
 
es muss Users heißen. Schau mal obs dann klappt.
 
Code:
set destPath to "/Users/ICH/"
tell application "TextEdit"
	open ":Users:ICH:loadthis.txt"
	set URLList to every paragraph of text of document 1
	close document 1
	repeat with i in URLList
		set cd to "cd " & quoted form of destPath & " curl -O " & quoted form of i
		do shell script cd
	end repeat
end tell


Klappt leider noch immer nicht - Datei wird nicht gefunden :(

In der Text Datei habe ich einfach mal schnell 3 Bilder von der Google Bildersuche rein:
http://games.pcmasters.de/fileadmin/Games/Sport/TDU2/3.jpg
http://www.lcdmedia.de/UserFiles/Image/pages/reparatur/beamer_test.jpg
http://www.beamer-test.com/images/LG-Projektor_AN110_Beamer-Test.jpg
 
Blöde Frage, aber die Datei ist in deinem Benutzerordner? Ich habs bei mir grad nochmal probiert, da gehts.
 
Ja ist sie - komisch, warum geht das dann bei mir nicht? :(

Textedit öffnet sich dann mit einem lehre Fenster und ich bekomm die Fehlermeldung "Das Dokument „/Users/ICH/loadthis.txt“ konnte nicht geöffnet werden. Die Datei existiert nicht." Wenn ich auf OK klicke schließt sich TextEdit wieder.
 
Ich hab die Datei jetzt mal auf auf meinen Server geladen und mit oben location geöffnet.

Jetzt wird die Datei zumindest gefunden. Allerdings wird sie auch in Safari angezeigt und zusätzlich wir ein leeres Textedit Fenster geöffnet. Heruntergeladen werden die Testbilder leider nicht :(

Optimal wär natürlich wenn man nichts sieht, oder die Fenster zumindest gleich wieder geschlossen werden.
 
Code:
set destPath to "/Users/ICH/"
tell application "Safari"
	open location "http://Pfad/datei.txt"
	set URLList to every paragraph of text of document of window 1
	close window 1
	repeat with i in URLList
		set cd to "cd " & quoted form of destPath & "; curl -O " & quoted form of i
		do shell script cd
	end repeat
end tell

Dann gehts vielleicht so.
 
Du kannst das mit dem Shell Befehl rsync machen:

rsync -av --delete 192.168.0.5:/Pfad/ /deinpfad

mit "man rsync" bekommst die Hilfeseite, mit "rsync" alleine eine kleine Befehlsübersicht.
Ausserdem ist rsync sehr schnell wenn es sich um große Datenmengen handelt, da rsync nur die geänderten Teile einer Datei kopiert.
 
Super, danke - funktioniert einwandfrei!! :)

Ich hab noch ein close window 0 und nach end repeat ein exit rein. Wenn Safari geschlossen ist und dann erst geöffnet wird, werden dann beide offenen Fenster geschlossen und Safari auch wieder beendet.

Gibt es noch eine Möglichkeit die kurzzeitig sichtbaren Safari Fenster komplett auszublenden - also z.B. minimiert starten? Aber ich vermute mal das lässt sich so nicht bewerkstelligen. Naja, sieht man halt kurzzeitig die zu ladenden Dateien im Browserfenster, aber immerhin funktioniert es :)
 
@Pill:

Ich habe jetzt leider noch zwei Probleme entdeckt :(
Zum einen werden die heruntergeladenen xy.jpg Bilder ohne Vorschau im Finder angezeigt (leeres weises Blatt Icon) und wenn ich sie öffnen will kommt die Meldung, das für die Datei xy.jpg kein Standardprogramm definiert ist. Hab dann mal die Vorschau App ausgewählt und sie damit geöffnet, hat dann funktioniert. Jetzt hat sich das System das irgendwie auch gemerkt und macht sie immer mit der Vorschau App auf - so wie auch alle anderen jpg Bilder. Eine Icon Vorschau existiert aber weiterhin nicht. Mir scheint der Dateiheader ist irgendwie falsch oder fehlt sogar ganz!? - Hilfe :(

Ein weiteres Problem, das ich leider nicht wirklich nachvollziehen kann ist, das die Bilder manchmal einfach nicht heruntergeladen werden. Ausgangslage ist immer ein geschlossener Safari. Oft klappt der Download, aber es passiert auch immer wieder, dass die Bilder nicht heruntergeladen werden. Dachte zuerst das wär ein Timing Problem und die Safari Fenster schließen zu schnell, aber auch ein löschen von close window 1 und 2 hat nicht geholfen.



@Gondomir:

Das wär jetzt zu einfach gewesen ... hat leider nicht geklappt
Hab es zu erst mit der URL versucht:
rsync -av --delete http://myserver.de/test/ /Users/ICH/test/
Das hat den Fehler "ssh: Could not resolve hostname http: nodename nor servname provided, or not known" ergeben.

Hab dann mal die (derzeitige?) IP des Servers rausgesucht und es damit versucht:
rsync -av --delete xx.xxx.xxx.xx:/test/ /Users/ICH/test/
Allerdings hat das leider auch ein Fehler ergeben: "The authenticity of host 'xx.xxx.xxx.xx (xx.xxx.xxx.xx)' can't be established.
RSA key fingerprint is bc:23:46:72:8a:16:bc:e8:44:2d:50:d4:db:df:7e:58.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'xx.xxx.xxx.xx' (RSA) to the list of known hosts.
Password:"

Klingt nicht so gut und welches Passwort bitte?

Auch hab ich hier ein Verständnisproblem: Man kann auf einem Server doch nicht ohne FTP Zugang schauen welche Dateien vorhanden sind, sondern nur per direkter URL auf bekannte zugreifen, wie soll dann so ein Sync möglich sein?
 
Zuletzt bearbeitet:
Probier das ftp-Passwort.

rsync verwendet ssh, du solltest deswegen dort einen normalen Useraccount haben. Ob das der Fall ist kannst du so probieren:
ssh username@87.106.211.55
dann das Passwort probieren, das du hast.

Wenn das klappt lautet der Befehl:
rsync -av username@87.106.211.55:/Pfaddrüben /deinpfadhier
Das kopiert die Änderungen von drüber zu dir.

Der Befehl
rsync -av /deinpfadhier username@87.106.211.55:/Pfaddrüben
kopiert die Dateien von dir zum Server.
Die --delete Option löscht die Dateien die an der Quelle nicht mehr vorhanden sind.

Wenn das alles klappt kannst du mal nach ssh-Schlüssel googeln. Wenn du am Server deinen Schlüssel ablegst, kannst du in Zukunft ohne Passworteingabe drauf zugreifen.

Zum Verständnisproblem: rsync loggt sich mittels ssh dort ein, macht ein "ls" also ein Directory-Listing. Dann macht es Prüfsummen über die Dateien, und vergleicht diese mit deine lokalen Dateien. Die geänderten Dateiteile werden dann übertragen und dann deine lokalen Dateien praktisch "gepatcht", d.h. neu zusammengebaut anstatt kopiert. Dadurch ist es viel schneller (in der Regel ein paar tausend mal) als reines kopieren.
 
Mit dem ssh Testbefehl kommt nach der Passworteingabe: "Have a lot of fun...
Connection to xx.xxx.xxx.xx closed."

Mit rsync -av username@... bekomme ich nach der Passworteingabe folgende Meldung: "rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at /SourceCache/rsync/rsync-40/rsync/io.c(452) [receiver=2.6.9]"

Scheint also nicht zu gehn, schade. Kenne mich mit ssh aber auch überhaupt nicht aus. Wenn ich jedoch den Schlüssel auf dem Server ablege ist das ja auch ein Sicherheitsrisiko, denn dann kann ja Jeder den Server durchsuchen und alle Daten (auch phps) herunterladen. Wenn der Schlüssel auf dem Client Mac ist, ist es wie gesagt auch schlecht, da ich dort nicht der Admin bin und den der Admin aber auch nicht sehen darf.


@Pill:
Ich bin trotzdem auch weiterhin an der Applescript Methode interessiert, bloß müssten die zwei vorhin genannten Probleme irgendwie noch gelöst werden - ich hoffe du hast da eine Idee!
 
Dann müsstest du beim Provider nachfragen, dass er dir den ssh Zugang freischaltet.
Die Loginmethode mit dem Schlüssel ist sicher. Nur wer den privaten Schlüssel des Schlüsselpaares hat, kann sich einloggen. Das bist nur du.
 
Schau mal was im Feld Name & Suffix in den Informationen von den Dateien ohne Icon dransteht, wahrscheinlich fehlt das Suffix. Falls ja, dann entweder die Pfade in der Textdatei ändern oder folgendes im Skript ändern:

Code:
set cd to "cd " & quoted form of destPath & "; curl -O '" & i & ".jpg'"

Warum manche Dateien nicht gehen, kann ich nicht genau sagen, eventuell sind Leerzeichen oder Sonderzeichen im Pfad vorhanden?
 
... ok, ein Problem gelöst, eins bleibt noch!

Das .jpg Suffix war schon dran, deswegen hab ich mich ja so gewundert. Allerdings hab ich jetzt mal versucht die Datei umzubenennen und da ist mir was extrem merkwürdiges aufgefallen: Hinter dem Suffix ist quasi noch ein Enter, also eine 2. leere Zeile. Wenn ich das weglösche, so das der Dateinahmen nur noch einzeilig ist, erscheint die Iconvorschau des Bildes und alles funktioniert wieder! Man müsste also schauen, das man im Script irgendwie beim Dateinahmen kein Enter/zweite Zeile rein bekommt.


Zu der Zweiten Geschichte, das manchmal einfach keine Dateien heruntergeladen werden: Das sind keine anderen Dateien, ich habe die ganze Zeit mit diesen 3 Testdateien gearbeitet und Safari war in der Ausgangslage immer komplett geschlossen. Komischerweise funktioniert es meistens, manchmal (teils auch hintereinander) aber eben auch nicht. Es werden immer alle 3 Daten geladen oder aber gar keine - Safari öffnet sich aber immer und es gibt nie einen Scriptfehler.
 
Zurück
Oben Unten