• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung

Wie Ordneraktion automatisch an Unterordner anhängen?

Musee

Auralia
Registriert
07.04.08
Beiträge
198
Hallo,
weiß jemand wie man es einrichtet, dass eine Ordneraktion automatisch an alle in einem Ordner vorhandenen und neu ertstellten Unterordner angehängt wird?
Alternativ: Ist es möglich dass eine Ordneraktion ausgeführt wird wenn sich in einem Unterordner etwas verändert?
Wäre für Hilfe von erfahrenen Scriptern sehr dankbar!
 

toc-rox

Weigelts Zinszahler (Rotfranch)
Registriert
15.11.09
Beiträge
247
Es könnte hilfreich sein, die primäre Aufgabenstellung kurz zu beschreiben - vielleicht finden sich dann alternative Lösungsansätze.
 

Musee

Auralia
Registriert
07.04.08
Beiträge
198
Ich bin Maler und fotografiere regelmäßig meine Bilder. Von jedem dieser Fotos erstelle ich mehrere Varianten mit unterschiedlichen Dateigrößen und Farbprofilen für Web- und Druckanwendungen. Diese lege ich jeweils in einem Ordner ab. All diese Ordner befinden sich wiederum in einem gemeinsamen Ordner. Mein Ziel ist es, dass immer wenn ich dort einen neuen Unterordner für ein neues Bild erstelle, eine bestimmte Variante der darin befindlichen Fotos automatisch in meinen Dropboxordner kopiert wird. Komfortabel wäre es, wenn ich dazu nicht erst extra an jeden neu erstellten Ordner die entsprechende Aktion (die ich erfolgreich erstellt habe) anhängen müßte. Hänge ich nämlich die Aktion an den übergeordneten Ordner an, reagiert dieser zwar auf das Erstellen eines neuen Unterordners, nicht aber auf eine Veränderung in diesem, d.h. wenn ich die entsprechenden Fotos dort ablege. Theoretisch sehe ich zwei Möglichkeiten: 1.) die Aktion wird automatisch an erstellte Unterordner angehängt. 2.) Der Hauptordner reagiert auch auf Veränderungen in ihm befindlicher Unterordner.
Es ist das erste Mal, dass ich mich mit so was befasse. Vielleicht denke ich auch in die falsche Richtung. Ich hoffe ich konnte mein Problem verständlich schildern.
 

fyysh

Schweizer Glockenapfel
Registriert
25.01.10
Beiträge
1.386
Hi,

du wirst wohl nicht drumrum kommen, dich für das Umsetzen deines Vorhabens ein bisschen mit AppleScript auseinander zu setzen.

Hier ist schonmal ein Anfang:
So schaust du nach, ob ein Ordner eine FolderAction hat:
Code:
set myfolder to choose folder

--testen ob ein ordner eine folder action hat
tell application "System Events"
	if not (folder action (name of myfolder) exists) then
		display dialog (name of myfolder) & " hat keine folder action"
	else
		display dialog (name of myfolder) & " hat folder action"
	end if
end tell


Dasselbe so erweitert, dass es eine folder action anhängt, wenn der ausgewählte Ordner keine hat:
Code:
--script datei auswählen
set myfascript to choose file of type {"osas"} --erlaubpt nut *.scpt


--loop starten
repeat
	--ordner auswählen
	set myfolder to choose folder
	
	--testen ob ein ordner eine folder action hat
	tell application "System Events"
		if not (folder action (name of myfolder) exists) then
			--wenn ordner keine folder action hatt...
			display dialog (name of myfolder) & " hat keine folder action"
			try
				--versuch das ausgewählte script als folder action zu attachen
				attach action to myfolder as string using myfascript
				display dialog "jetzt hat " & (name of myfolder) & " folder action"
				exit repeat --loop verlassen = ende des scripts
			on error e
				display alert "hat nicht geklappt" message e
			end try
			
		else
			--wenn ordner folder action hat
			display dialog (name of myfolder) & " hat schon folder action" & return & "versuch's nochmal"
		end if
	end tell
end repeat --und wieder zurück zum anfang des loops


Viel Spaß! :)


P.S.: Ich würde mir eher ein cronjob erstellen mit folgendem Befehl:
rsync -Pahv --delete --force /pfad/zum/bilder/ordner/ /pfad/zum/bilder/ordner/in/der/dropbox/
und diesen regelmäßig laufen lassen.

Vorher aber das hier aufmerksam lesen:
http://www.manpagez.com/man/1/rsync/
http://www.oreilly.de/catalog/mcosxhksger/chapter/hack53.html


P.S.S: Noch einfacher:
http://wiki.dropbox.com/TipsAndTricks/SyncOtherFolders
 
Zuletzt bearbeitet:

Musee

Auralia
Registriert
07.04.08
Beiträge
198
Hi,
vielen Dank für die reichhaltige Hilfe. Das ist supernett!
Ich werde mich übers Wochenende mal damit befassen und dann Feedback geben.
Grüße
 

toc-rox

Weigelts Zinszahler (Rotfranch)
Registriert
15.11.09
Beiträge
247
Mögliche Lösungsansätze (einige bereits zuvor genannt):

1. Synchronisation der Folder per Utility (Tool, Cronjob, Shellscript, AppleScript, ...).
2. AppleScript zum automatischen Hinzufügen von Ordneraktionen.
3. Utility (Shellscript, AppleScript) zum automatischen Verteilen der Dateien in die Zielordner.
4. Ordneraktion nur im Hauptordner - automatische Verteilung der Dateien in die Zielordner anhand von Dateikriterien (Name, Typ, Inhalt, ...).
5. ... weitere ...

Variante 4 wird z.B. von mir verwendet um den Download-Folder zu strukturieren. Alle Dateien / Folder werden nach dem Eintreffen in Unterfolder verschoben die nach dem aktuellen Tagesdatum (z.B. "2010-11-06") benannt werden / sind.

Die Wahl der "besten" Variante hängt m.E. direkt von den genauen Anforderungen und den gegebenen Umsetzungsmöglichkeiten ab. Besonders interessant erscheint mir Variante 1.
 
Zuletzt bearbeitet:

-hans-

Jamba
Registriert
02.09.10
Beiträge
56
Hallo,

die ScritingAddition "satimage.osax" bietet auch eine Backup-Funktion. Auf der Homepage steht OSX 10.5 and higher ... (higher kann ich hier leider noch nicht testen :( ) Downloadlink steht im Code ...

Falls Du also nicht zu tief in die Materie einsteigen willst, dann ist das eine einfache Variante. Code in den ScriptEditor kopieren, als Programm mit der Option "nicht automatisch beenden" sichern. Vorher die property delaycheck Deinen Wünschen entsprechend ändern z.B. 300, damit der Syncvorgang alle 5 Minuten ausgeführt wird. Auf Deinem Desktop wird nach jedem Sync ein Sync Log File geschrieben:

Code:
(*This script uses the satimage.osax:
http://www.satimage.fr/software/downloads/Satimage360.pkg

-> Copy the downloaded file to "Library/ScriptingAdditions"

-> paste this code into a open ScriptEditor window  and save
it as programm with the option "stay open"

*)
property theSourceFolderSystem : "" --Path to the Sourcefolder as alias
property theDropBoxFolder : "" --path to your Destinationfolder as alias
property delaycheck : 15 --repeat script every x seconds

on run
	if theSourceFolderSystem is "" then
		set theSourceFolderSystem to choose folder with prompt "Please choose the Sourcefolder"
	end if
	if theDropBoxFolder is "" then
		set theDropBoxFolder to choose folder with prompt "Please choose the Destinationfolder"
	end if
end run

on idle
	try
		set theReport to backup theSourceFolderSystem onto theDropBoxFolder level 2 --do the sync
		set this_file to (((path to desktop folder) as text) & "Sync Log File") --path to logfile
		my writeReport(theReport, this_file, true) --call handler
	end try
	return delaycheck
end idle

on writeReport(this_data, target_file, append_data) --write logfile
	try
		set the target_file to the target_file as text
		set the open_target_file to ¬
			open for access file target_file with write permission
		if append_data is false then ¬
			set eof of the open_target_file to 0
		write this_data to the open_target_file starting at eof
		close access the open_target_file
		return true
	on error
		try
			close access file target_file
		end try
		return false
	end try
end writeReport


Gruß

Hans


P.S. Sorry wg. der engl. Scriptkommentare, die Gewohnheit ...
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Hallo!

Die meisten (alle?) OSAX laufen nur 32-Bit! Falls nötig: AppleScript-Editor.app -> Information -> 32 Bit Modus

Und nur, um auch noch meinen Senf dazu zu geben:
Ich würde (ähnlich, wie von fyysh erwähnt) rsync nehmen. 1 Zeile Code. Fertig. Das ganze mit launchd starten

Gruß
 

fyysh

Schweizer Glockenapfel
Registriert
25.01.10
Beiträge
1.386
...wobei du bei der von Sedna, toc-rox und mir vorgeschlagenen rsync-Lösung halt ein Duplikat hast (ich geh mal davon aus, dass die DroBo auf der selben Platte ist).
Und in der DroBo online dann ein Duplikat vom Duplikat usw...

Eigentlich ist ja der Tipp von DropBox itself, also einfach ein symlink zu erstellen, die beste Lösung... :)
Finde ich zumindest. So einfach kann's manchmal sein. :)

Es sei denn natürlich, das Duplikat ist das, was du anstrebst... :)
 

Musee

Auralia
Registriert
07.04.08
Beiträge
198
Danke für die vielen Anregungen.
Ich hatte zwar noch nicht die Zeit mich in "Applescript" einzuarbeiten bzw. eure Vorschläge genau zu durchdenken. Beim Durchsehen der Beiträge hatte ich aber den Eindruck, dass mein Problem doch nicht ganz deutlich geworden ist. Natürlich wäre es am einfachsten den entsprechenden Ordner über einen Symlink mit der Dropbox zu syncen. Ich möchte aber, dass nur bestimmte Dateien innerhalb eines Unterordners in diesem Ordner auf meine Remote-Dropbox hochgeladen werden. Und das eben automatisiert.
Der Vorgang ist konkret folgender:
Ich exportiere aus Lightroom ein Foto in mehreren Varianten. Diese Varianten werden automatisch gemeinsam in einem Unterorder im Hauptordner abgelegt, darunter eine, mit einer bestimmten Bezeichnung im Namen (z.B. "für Druck mit eci-Profil). Ich möchte nun, dass nur diese Datei automatisch auf die Dropbox geladen wird. Im Automator hatte ich mir eine Ordneraktion erstellt die die Unterordner nach Dateien mit dem entsprechenden Zusatz im Dateinamen durchsucht und diese dann auf die Dropbox kopiert. Diese Aktion habe ich an den Hauptorder angehängt.Das funktioniert auch perfekt. Allerdings nur, wenn ich die Ordneraktion jeweils von Hand starte. Es geht also nur darum, dass der Hauptorder die Aktion automatisch durchführt wenn sich in einem Unterordner etwas verändert. Es würde auch ausreichen wenn dies z.B. beim Schließen des Hauptordners geschehen würde. Alternativ, dachte ich eben, könnte die Ordneraktion auch automatisch an neu erstellte Unterordner angehängt werden.
Natürlich ist mir die einfachste Lösung die liebste, da ich keine Erfahrung mit so was habe.
Für eure Tipps bin ich sehr dankbar. Ich will aber auch nicht nerven oder die Mühe an andere delegieren.
Schönen Sonntag noch.
 

fyysh

Schweizer Glockenapfel
Registriert
25.01.10
Beiträge
1.386
Häng doch mal dein funktionierendes workflow an, dann können wir uns genauer vorstellen, was am Schluss rauskommt. :)
 

fyysh

Schweizer Glockenapfel
Registriert
25.01.10
Beiträge
1.386
Wahrscheinlich ist was du suchst eine kombination aus find & rsync.

Nehmen wir an, der root deiner Bilder, also da, wo du hi Bilder exportierst in all ihren Varianten ist in "/Users/musee/Pictures/lightroom"
Der Namenszusatz der Bilder, die in die DroBo sollen, wäre "eci", also sowas wie "bild123_eci.jpg"
Deine DroBo wäre in "/Users/musee/Dropbox" und der Zielordner wäre "/Users/musee/Dropbox/eci-Bilder"

Dann bräuchtest du ein Bash Script, mit folgendem Inhalt:
Code:
#!/bin/bash
PIC_SRC="$HOME/Pictures/lightroom"
PIC_TGT="$HOME/Dropbox/eci-Bilder"
NAME_AFFIX="eci"

# wenn NAME_AFFIX im dateinamen steht (bspw. "bild123_eci.jpg")
find "$PIC_SRC" -type f -name "*$NAME_AFFIX*" -exec rsync -Pahv '{}' "$PIC_TGT" \;

# wenn NAME_AFFIX teil des dateipfads ist steht (bspw. $PIC_SRC/eci/bild123.jpg)
# find "$PIC_SRC" -type f -wholename "*$NAME_AFFIX*" -exec rsync -Pahv '{}' "$PIC_TGT" \;


Das ganze dann mit cron oder launchd triggern... (entweder oder)

Mehr Infos:
find: http://www.manpagez.com/man/1/find/
rsync: http://www.manpagez.com/man/1/rsync/
launchd: http://www.manpagez.com/man/8/launchd/, http://www.manpagez.com/man/1/launchctl/, http://www.manpagez.com/man/5/launchd.plist/
crontab: http://www.manpagez.com/man/1/crontab/, http://www.manpagez.com/man/5/crontab/
 

Musee

Auralia
Registriert
07.04.08
Beiträge
198
Ich kann keine Workflowdatei anhängen. Ich versuch's mal mit einem Screenshot.

Workflow..jpg
 

fyysh

Schweizer Glockenapfel
Registriert
25.01.10
Beiträge
1.386
Dann: Japp, die oben genannte find+rsync-Lösung ist was für dich :)
 

Musee

Auralia
Registriert
07.04.08
Beiträge
198
Uff! Da gibt's für mich jetzt erst mal eine Menge zu lesen, lernen, verstehen. "You asked for it and you got it"
Schade, dass es im "Automator" nicht einfach die Funktion "Aktion auf Unterordner anwenden" gibt.
 

Musee

Auralia
Registriert
07.04.08
Beiträge
198
Ja, das Problem ist, dass mir momentan komplett die Grundlagen fehlen ausserhalb des GUI zu arbeiten. Ich weiß weder was ein bash-Script ist noch wo ich selbiges speichern oder bearbeiten kann, wie ich es an den Ordner anhänge usw.
Wie gesagt, ist es an mir diese Wissenslücken zu stopfen. Momentan fische ich da nur im Trüben und hab auch Angst da was zu verpfuschen.
Interessant wäre vielleicht, ob ich auf einfache Art meine obige Ordneraktion bei Schließen des Ordners auslösen kann.
Aber vielen Dank für eure Mühe!
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Hallo Musee!

In meinem Link zu launchd ist das Helfer-Programm Lingon erwähnt. Das HAT ein GUI und ist wirklich nicht schwer zu bedienen.
Und ja, du kannst auch deinen Automator Workflow (als Programm gesichert) damit starten.
Code:
open Pfad/zum/Automator-Programm

Dein Automator Workflow wird allerdings einen Fehler auswerfen, wenn keine JPEGs zu finden sind. Das ist eine kleine Schwäche des Automators, an der noch gearbeitet wird.
Um diesen Fehler zu vermeiden, füge die Aktion "AppleScript ausführen" vor "Finder Objekte Bewegen" ein
Code:
on run {input, parameters}	
if (input as text) is "" then
error -128
else	
return input
end if
end run

Und ja, eine Ordneraktion kann auch ausgeführt werden, wenn ein Ordner geschlossen wird -- nur lässt sich das nicht mit dem Automator erstellen.
AppleScript-Editor öffnen -> Rechtsklick ins Fenster -> Folder Actions Handlers -> closing window

Code:
on closing folder window for this_folder
tell application "Name des Automator Programms" to activate
end closing folder window for

Das Skript speicherst du als .scpt in ~/Library/Scripts/Folder Action Scripts
Danach Rechtsklick auf deinen Ordner -> Ordneraktionen konfigurieren -> Das Skript anhängen
(Nicht vergessen, in dem Pop Up Fenster Ordneraktionen aktivieren anzuhaken)


Zur Sache:
Was ist ein Bash Skript und wie speichere ich es (oder füge es ein) --> das soll dir fyysh erklären :)
 
  • Like
Reaktionen: fyysh

toc-rox

Weigelts Zinszahler (Rotfranch)
Registriert
15.11.09
Beiträge
247
...Ich exportiere aus Lightroom ein Foto in mehreren Varianten. Diese Varianten werden automatisch gemeinsam in einem Unterorder im Hauptordner abgelegt, darunter eine, mit einer bestimmten Bezeichnung im Namen (z.B. "für Druck mit eci-Profil). ...
Falls alle exportierten Dateien einem bestimmten Namensschema entsprechen, wäre auch eine automatische Verteilung mittels Ordneraktion nur am Hauptordner möglich. Die Dateien würden dann von Lightroom immer im Hauptordner abgelegt und durch die Ordneraktion in den Unterordner und die Dropbox verschoben bzw. kopiert.
 

fyysh

Schweizer Glockenapfel
Registriert
25.01.10
Beiträge
1.386
<OT>
Dieses Lingon ist nett... kannte ich gar nicht.
Werd's bei der nächsten Gelegenheit ausprobieren.
Wäre ja super, wenn das gut funzt -- muss man die blöden launchd.plists schon nicht mehr manuell schreiben :D
<OT>