sync zweier ordner/ersten 5 Stellen ignorieren

B

bibolette

Mitglied
Thread Starter
Dabei seit
24.04.2003
Beiträge
32
Reaktionspunkte
2
Hallo liebes Forum,
ich suche eine Lösung wie ich meine Dateien anständig aktualisieren kann.
Aufgabenstellung ist einen kleinen Workflow zu basteln.
Ich habe es schon mit Automator und anderen syncProgrammen versucht aber nicht recht hingekriegt.
Vielleicht weiss einer von euch einen Rat.

Workflow soll wie folgt sein.

Der Hauptordner beinhaltet Ordner mit der Kennung: 1234_ABC, 2345_DEF

Jetzt lege ich in einen "Temp"-Ordner einen Ordner: 5678_ABC

Die Automation soll den Ordner: 5678_ABC in den Hauptordner legen und den "alten" Ordner 1234_ABC in ein Archiv-Ordner legen.
Ja, 1234_ABC.
Hintergrund ist, dass es Jobs sind und die ersten 4 Ziffern Jobnummern.
Die Jobnummern ändern sich, jedoch der Name der Projekte nicht. Um dies aktuell zu halten brauche ich diesen Workflow.
Geht sowas mit den Automator?
Verschieben etc kriege ich mit den Automator hin, jedoch das der Automator die ersten 4 Ziffern ignoriert und sich nur nach den Jobnamen (hier "ABC") orientiert funktioniert irgend wie nicht

vielen Dank für eure Hilfe
Bibolette
 
Mal als Ansatz:

Code:
tell application "Finder"

	set startPfad to ":Users:Name:Desktop:Ordner1:" as alias
	set zielPfad to ":Users:Name:Desktop:Ordner2:" as alias
	
	set zielNamen to {}
	set AppleScript's text item delimiters to {"_", "."}
	set zielOrdner to name of folders of zielPfad
	set startOrdner to name of folders of startPfad
	repeat with i in startOrdner
		repeat with j in zielOrdner
			if (text item 2 of i) = (text item 2 of j) then
				set AppleScript's text item delimiters to ""
				delete zielPfad & j as string
			end if
			set AppleScript's text item delimiters to ""
			set mv to "mv '" & POSIX path of startPfad & i & "' '" & POSIX path of zielPfad & i & "'"
			do shell script mv
		end repeat
	end repeat
end tell

Das kannst du dann noch ergänzen, zum Beispiel um den Ordner überwachen zu lassen. Viel Spass beim Ausprobieren!
 
Zuletzt bearbeitet:
Danke Pill,
werde es gleich mal ausprobieren

viele Grüße
Bibolette
 
Hallo Pill,
funktioniert wunderbar.
Es wird der Ordner in Ordner2 ersetzt. Super.
Einzige Modifikation wäre,dass er nicht den bestehenden Ordner in Ordner2 in den Papierkorb legt sondern in ein Archivordner z.B. Ordner3

Desweiteren durchsucht er nur die erste Ebene von Ordner2 und nicht die Subordner.
Geht das, dass das Script alle hierachischen Ordnerebenen berücksichtigt?


viele Grüße
Bibolette
 
Das mit Archivieren hab ich mal noch ergänzt:

Code:
 tell application "Finder"
	
	set startPfad to ":Users:Name:Desktop:Ordner1:" as alias
	set zielPfad to ":Users:Name:Desktop:Ordner2:" as alias
	set archivPfad to ":Users:Name:Desktop:Ordner3:" as alias
	
	set zielNamen to {}
	set AppleScript's text item delimiters to {"_", "."}
	set zielOrdner to name of folders of zielPfad
	set startOrdner to name of folders of startPfad
	repeat with i in startOrdner
		repeat with j in zielOrdner
			if (text item 2 of i) = (text item 2 of j) then
				set AppleScript's text item delimiters to ""
				set archiv to "mv '" & POSIX path of zielPfad & j & "' '" & POSIX path of archivPfad & j & "'"
				do shell script archiv
			end if
		end repeat
		set AppleScript's text item delimiters to ""
		set mv to "mv '" & POSIX path of startPfad & i & "' '" & POSIX path of zielPfad & i & "'"
		do shell script mv
	end repeat
end tell

Beim 2. Teil ist mir allerdings noch nicht so ganz klar, wie du dir das genau vorstellst. Möchtest du, dass Unterordner zum Beispiel ergänzt werden, sodass der Ordner "zusammengefügt" wird, wie bei Windows? Am Besten schreibst du mal deine Ordnerstruktur mit vorher/nachher, damit wir uns nicht missverstehen.
 
Hallo Pill,
das ging ja schnell! Danke.

Hier ein Screenshot.

ordner.gif

Wie du siehst existiert erst in der 2. Ebene die zu ersetzenden Ordner.
Manchmal ist es sogar erst in der 3. Ebene.
Dein Script tastet die oberste Ebene ab, aber nicht die Subordner.
(In diesem Beispiel müsste der Ordner 1111_ABC mit Inhalt den Ordner 2345_ABC ersetzen. Und 2345_ABC sollte ins Archiv verschoben werden)
viele Grüße
bibolette
 

Anhänge

  • ordner.gif
    ordner.gif
    11,7 KB · Aufrufe: 57
Hallo Pill,
hast du da noch eine Idee oder einen Ansatz?

viele Grüße + schönes Wochenende
bibolette
 
Sorry, hatte den Thread hier ganz vergessen.

Das ist sicher nicht der schönste Weg, sollte aber funktionieren:

Code:
tell application "Finder"
	
	set startPfad to ":Users:Name:Desktop:Ordner1:" as alias
	set suchPfad to ":Users:Name:Desktop:Ordner2:" as alias
	set archivPfad to ":Users:Name:Desktop:Ordner3:" as alias
	
	set suchName to folders of startPfad
	
	repeat with i in suchName
		
		--zu ersetzende Dateien (zielDatei) suchen
		
		set suchOrdner to {}
		set AppleScript's text item delimiters to {"_", ":"}
		set suchItem to text item -2 of (i as string)
		set AppleScript's text item delimiters to ""
		set search to "find '" & text items 1 thru -2 of POSIX path of suchPfad & "' -name *" & suchItem & "* -type d"
		set end of suchOrdner to every paragraph of (do shell script search)
		
		repeat with j in item 1 of suchOrdner
			set AppleScript's text item delimiters to ""
			set iname to name of ((text items 2 thru -1 of (POSIX path of file j as string) as string) as alias)
			set AppleScript's text item delimiters to {"_", "."}
			if (count of text items of iname) = 2 then
				set AppleScript's text item delimiters to ""
				set zielDatei to (text items 2 thru -1 of (POSIX path of file j as string) as string)
			end if
			set AppleScript's text item delimiters to ""
		end repeat
		
		set AppleScript's text item delimiters to "/"
		set zielOrdner to text items 1 thru -3 of POSIX path of (zielDatei as alias) as string
		set AppleScript's text item delimiters to {"_", ":"}
		
		-- zielDatei archivieren
		
		if suchItem = (text item -1 of zielDatei) then
			set AppleScript's text item delimiters to ""
			set archiv to "mv '" & POSIX path of zielDatei & "' '" & POSIX path of archivPfad & name of (zielDatei as alias) & "'"
			do shell script archiv
		end if
		
		--neue Dateien verschieben
		
		set AppleScript's text item delimiters to ""
		set mv to "mv '" & POSIX path of (i as alias) & "' '" & zielOrdner & "'"
		do shell script mv
	end repeat
end tell
 
Zuletzt bearbeitet:
Hallo Pill,
danke für den Einsatz.

Leider schmeisst mir der Editor diesen Fehler aus:
Die Variable „zielDatei“ ist nicht definiert.

Habe ich was falsch definiert?

viele Grüße
bibolette
 
Ich konnte deinen Fehler jetzt nicht reproduzieren, aber hab noch ein paar andere Sachen entdeckt, vielleicht behebt sich so ja auch dein Problem:

Code:
tell application "Finder"
	
	set startPfad to ":Users:Name:Desktop:Ordner1:" as alias
	set suchPfad to ":Users:Name:Desktop:Ordner2:" as alias
	set archivPfad to ":Users:Name:Desktop:Ordner3:" as alias
	
	set suchName to folders of startPfad
	
	repeat with i in suchName
		
		--zu ersetzende Dateien (zielDatei) suchen
		
		set suchOrdner to {}
		set AppleScript's text item delimiters to {"_", ":"}
		set suchItem to text item -2 of (i as string)
		set AppleScript's text item delimiters to ""
		set search to "find '" & text items 1 thru -2 of POSIX path of suchPfad & "' -name *" & suchItem & "* -type d"
		set end of suchOrdner to every paragraph of (do shell script search)
		
		repeat with j in item 1 of suchOrdner
			set AppleScript's text item delimiters to ""
			set iname to name of ((text items 2 thru -1 of (POSIX path of file j as string) as string) as alias)
			set AppleScript's text item delimiters to {"_", "."}
			if (count of text items of iname) = 2 then
				set AppleScript's text item delimiters to ""
				set zielDatei to (text items 2 thru -1 of (POSIX path of file j as string) as string)
				set AppleScript's text item delimiters to "/"
				set zielOrdner to text items 1 thru -3 of POSIX path of (zielDatei as alias) as string
			else
				set zielOrdner to j
			end if
			set AppleScript's text item delimiters to ""
		end repeat
		
		
		-- zielDatei archivieren
		
		try
			set AppleScript's text item delimiters to {"_", ":"}
			if suchItem = (text item -1 of zielDatei) then
				set AppleScript's text item delimiters to ""
				set archiv to "mv '" & POSIX path of zielDatei & "' '" & POSIX path of archivPfad & name of (zielDatei as alias) & "'"
				do shell script archiv
			end if
		end try
		
		--neue Dateien verschieben
		
		set AppleScript's text item delimiters to ""
		set mv to "mv '" & POSIX path of (i as alias) & "' '" & zielOrdner & "'"
		do shell script mv
	end repeat
end tell
 
Guten Morgen Pill,
danke erst einmal.
beim Start des Scripts meldet er mir " die Variable "zielOrdner" ist nicht definiert".

Was ich gemacht habe:
- Oben in script startpfad,suchpfad,archivpfad angepasst.
-Ordner1 2 und 3 angelegt
-in Ordner1 einen Ordner angelegt: 1235_ABC. In diesen Ordner eine PDF-Datei gelegt mit den Namen: 5555_ABC.pdf
- in Ordner2 ein Ordner angelegt mit 1111_ABC mit einer Datei 5678_ABC.pdf
- Ordner3 ist leer
- dann das script gestartet.

dann kam die Fehlermeldung

viele Grüße
bibolette
 
Guten Morgen bibolette,

ich habe das so ausprobiert wie du und bei mir hats geklappt. Kannst du den Text posten der im AppleScript Editor bei Events steht?
 
Code:
tell application "Finder"
	get every folder of alias "Macintosh:Users:bibolette:Desktop:Ordner1:"
	get folder "1235_ABC" of folder "Ordner1" of folder "Desktop" of folder "bibolette" of folder "Users" of startup disk
	do shell script "find '/Users/bibolette/Desktop/Ordner2' -name *Macintosh:Users:bibolette:Desktop:Ordner1:1235* -type d"
	get folder "1235_ABC" of folder "Ordner1" of folder "Desktop" of folder "bibolette" of folder "Users" of startup disk
		"Die Variable „zielOrdner“ ist nicht definiert."

viele Grüße
bibolette
 
Hallo Pill,
hast du Problem eingrenzen können?


viele Grüße
bibolette
 
Hallo bibolette

do shell script "find '/Users/bibolette/Desktop/Ordner2' -name *Macintosh:Users:bibolette:Desktop:Ordner1:1235* -type d"

sollte eigentlich heißen:

do shell script "find '/Users/bibolette/Desktop/Ordner2' -name *ABC* -type d"

Gründe für den Fehler könnten sein, dass der Ordnername nicht stimmt oder aber du in der folgender Zeile das -1 durch ein -2 ersetzen musst:

set suchItem to text item -2 of (i as string)

Ich hab zur Zeit leider wenig Zeit, versuche aber an dem Problem dran zu bleiben.

viele Grüße
Pill
 
Zurück
Oben Unten