Ordner abgleichen

double-v

double-v

Mitglied
Thread Starter
Dabei seit
14.09.2007
Beiträge
46
Reaktionspunkte
4
Hallo zusammen,

ich hab folgendes Problem:

Ich habe einen Ordner mit verschiedenen Unterordnern und Dateien auf dem Schreibtisch, der gleiche Ordner liegt auf einem Server bereit.

Nun möchte ich gerne beide Ordner inkl. aller Unterordner und Dateien abgleichen und bei Bedarf synchronisieren, wenn ich den Rechner starte. Sobald sich also im Ordner auf dem Server etwas verändert hat, also z.B. eine Datei aktualisiert wurde, soll entweder nur diese Datei im Ordner auf dem Schreibtisch ersetzt werden (ambesten ohne Nachfrage) oder alternativ der Ordner auf meinem Mac gelöscht und der ganze Ordner neu vom Server gezogen werden.

Ich hab das ganze schon soweit über Applescript realisiert, dass ich die Änderungsdaten der Hauptordner vergleiche - wenn der Ordner auf dem Server also ein neueres Datum hat als der auf dem Schreibtisch, wird der Schreibtischordner gelöscht und neu vom Server gezogen. Nur ändert sich diese Datum halt nicht, wenn eine Datei in nem Unterordner aktualisert wird :mad: Meiner Meinung nach ließe sich das am besten rekursiv lösen aber soweit kenn ich mich in Applescript leider noch nicht aus :confused:

Das ganze sollte nach Möglichkeit ohne Zusatzprogramme gelöst werden, am besten nur über Applescript oder den Automator.

Danke schon mal für die Hilfe ;)
 
Hallo,

ich hatte ebenfalls Mal die Notwendigkeit alle Unterordner und deren Dateien zu ermitteln.

Nachstehendes Skript hatte ich dafür verwendet (Ausschnitt):

Code:
global alleOrdner
set alleOrdner to {}

global alleDateien
set alleDateien to {}

global dateiSuffixe
set dateiSuffixe to {"jpg", "gif", "png"}

tell application "Finder"
	set mutterOrdner to alias "Mein:Pfad"
	set meinScanOrdner to every folder of mutterOrdner
	
	if meinScanOrdner is not {} then
		my unterOrdernAuslesen(meinScanOrdner)
		my alleDateienErmitteln(alleOrdner)
	else
		display dialog "keine Unterordner"
	end if
end tell

-- ______________________________________ Unteordner ermitteln
on unterOrdernAuslesen(unterOrdner)
	tell application "Finder"
		repeat with naechsterOrdner in unterOrdner
			set naechsterOrdnerPfad to naechsterOrdner as string
			set alleOrdner to alleOrdner & naechsterOrdnerPfad
			set unterOrdner to every folder of naechsterOrdner
			my unterOrdernAuslesen(unterOrdner)
		end repeat
	end tell
end unterOrdernAuslesen

-- ______________________________________ Dateien ermitteln
on alleDateienErmitteln(gesamteOrdnerStruktur)
	tell application "Finder"
		
		-- die Dateien auslesen
		repeat with naechsterOrdner in gesamteOrdnerStruktur
			set scanOrdner to alias naechsterOrdner
			set naechsterOrdnerDateien to (files of scanOrdner whose name extension is in dateiSuffixe)
			
			repeat with naechsteDateiOrdner in naechsterOrdnerDateien
				copy (naechsteDateiOrdner) as string to end of alleDateien
			end repeat
			--set alleDateien to alleDateien & naechsterOrdnerDateien
		end repeat
		
	end tell
end alleDateienErmitteln

Bitte beachten:

Das ist wirklich schon lange her. Heute würde ich vieles "besser und schneller" umsetzen. Aber es gibt Dir einen guten Ansatz.

Viele Grüße
 
rsync nennt sich das Tool.

man rsync

Beispielsweise:
Code:
/usr/local/bin/rsync -e "ssh -p 22" -avzu 10.5.5.5:/foo/bar/ /Users/user/Desktop/foobar/ >> /var/log/rsync.log

Via rsync/ssh eine Verbindung zum Server 10.5.5.5 aufbauen und das Verzeischnis /foo/bar auf dem Server mit dem Verzeichnis /Users/user/Desktop/foobar/ auf dem Client vergleichen. Sind Änderungen erfolgt, werden diese auf dem Client geschrieben, bzw. Dateien die auf dem Server nicht mehr vorhanden sind, gelöscht,...

Wie Du die Schalter am besten setzen willst (-avzu) entnimmst Du der manpage zu rsync. Obige könntest Du für Deinen Fall so lassen wie sie sind.
 
Nicht schlecht, nach kurzer Zeit schon so ergiebige Antworten :) Danke! :clap:

Das Script werd ich mir mal näher anschauen, ChronoSync kostet ja leider was und rsync .... :confused: ... versteh ich net, was ist das?

Ich hab das ganze in der Zwischenzeit mal so gelöst, dass ich einfach ein Logfile über Veränderungen in den Ordner schreiben lass und nur das Änderungsdatum von dem File aulesen lasse.

Aber dieses rsync klingt trotzdem sehr interessant, vielleicht kann mir das ja noch jemand näher erläutern :kopfkratz:
 
rsync sollte per default bei sein. Öffne einfach Dein Terminal und rufe "man rsync" auf.
rsync macht genau das was Du willst. Mit Hilfe des Automators kann man da sicherlich rsync einbinden.

http://de.wikipedia.org/wiki/Rsync
http://samba.anu.edu.au/rsync/

http://samba.anu.edu.au/ftp/rsync/rsync.html
Das liest sich evtl. schlimmer als es ist. Wie gesagt, mit obiger Zeile sollte das erfüllt sein was Du willst. Da muss man nicht kompliziert logs auslesen oder zeilenweise selbst skripten oder etwas kaufen. Das geht alles mit Boardmitteln bei einem unix system.

Bei weiteren Fragen, gerne hier oder PM.
 
Vielen Dank für die Infos, ich werd mir das ganze mal genauer ansehen. Wenn ich niht ganz durchblicke werd ich Euch wieder hier belästigen ;)
 
Zurück
Oben Unten