Automator: Ordner filtern, kopieren und Ordnerstruktur erhalten

G

glasbehang

Registriert
Thread Starter
Dabei seit
21.03.2013
Beiträge
3
Reaktionspunkte
0
Hallo zusammen!

Ich bin ein neuer Automator-User und verzweifle schon bei meiner ersten Aufgabe.

Ich möchte mittels Automator-Arbeitsablauf einen Ordner mit diversen Unterordnern kopieren. Es sind viele verschiedene Dateiarten enthalten, es sollen aber nur JPGs kopiert werden. Und die Ordnerstruktur soll auch erhalten bleiben.

Mit anderen Worten: Es soll der gesamte Ordner mit allen Unterordnern und Dateien, außer Dateien die keine JPGs sind, kopiert werden.

Das Selektieren und Kopieren der Dateien habe ich schon geschafft, allerdings war die Ordnerstruktur beim Teufel. Im Zielordner waren sämtliche JPGs im obersten Ordner und nicht mehr in den Unterordnern, in die sie gehören.

Eine Möglichkeit wäre, den gesamten Ordner zu kopieren und anschließend alle unerwünschten Dateien zu löschen. Das will ich aber vermeiden, da es zu viel Datentransfer wäre, wenn ich den Arbeitsablauf regelmäßig ausführen lasse.

Ich hoffe, dass ich mich verständlich ausgedrückt habe :confused: und würde mich freuen, wenn mir jemand dabei helfen kann.

David
 
Automator ist das falsche Werkzeug dafür. Mit der Shell geht das sehr viel einfacher, z.B. mit rsync:

Code:
rsync -rav --include='*/' --include='*.jpg' --exclude='*' '~/Desktop/test' '~/Desktop/test 2'
 
Danke Pill! Das war zwar nicht ganz die erhoffte Antwort, da die Shell wohl weniger intuitiv zu bedienen ist als der Automator, aber mal sehen, ob mir das gelingt. Momentan verstehe ich nur Bahnhof.
 
Ich versuch mich mal an einer Erklärung des Befehls. Informationen zu den Shell-Befehlen bekommst du, wenn du im Terminal “man Befehl” (immer ohne Anführungszeichen) eingibst und mit Enter bestätigst, in diesem Fall also “man rsync”. Im Netz findest du außerdem ein paar gute Anleitungen zu rsync.

rsync ist ein Programm, mit dem man 2 Ordner synchronisieren kann, in diesem Fall wird der Ordner /Users/DeinName/test mit dem Ordner /Users/DeinName/test 2 synchronisiert. Diese Pfade kannst du auf 2 beliebige Ordner abändern. Wichtig ist nur, dass die Pfade in Anführungszeichen stehen, damit Sonderzeichen maskiert werden.

Da du nicht den gesamten Ordnerinhalt kopieren möchtest, sondern nur die Ordner und JPEG-Dateien, habe ich mich der exclude- und include-Option bedient. Mit diesen Optionen lassen sich Dateien und Ordner mit regular expressions filtern. Man kann also die Dateien nach einem bestimmten Muster filtern. Ein * steht dabei für eine beliebige Anzahl von beliebigen Zeichen. --exclude='*' schließt also erstmal alle Dateien und Ordner aus, es werden keine Dateien verschoben. include ist aber stärker als exclude, daher kann ich damit bestimmte Dateien doch zulassen. --include='*.jpg' schließt alle Dateien mit ein, die auf .jpg enden. Analog dazu schließt --include='*/' alle Dateien mit ein, die auf / enden, also alle Ordner.
-rav sorgt dafür, dass auch Ordner kopiert werden (-r), dass alle Rechte und Eigentümer übernommen werden (-a) und den verbose-Mode (-v), das heisst rsync teilt dir immer mit , was es gerade macht.

Letzten Endes musst du also nur die Pfade am Schluss anpassen, dann sollte alles funktionieren. Probier es einfach mal mit ein paar Dateien aus (vorher bitte ein Backup machen!).
 
Okay, das klingt ja ganz logisch. Ein Problemchen ist dabei aufgetaucht: Mein Quell-Ordner ist nicht im Benutzer-Ordner sondern direkt auf Macintosh HD. Kannst du mir bitte nochmals beim richtigen Befehl dafür helfen? Was muss statt
'~/Desktop/test' stehen?

Und wie funktioniert rsync grundsätzlich? Wird jedes Mal, wenn im Quellordner etwas geändert wird, gesynct? Oder gibt es sonst irgend ein Muster, wonach der Sync läuft?
 
~ steht für den Benutzerordner. Stattdessen kannst du jeden anderen Ordner angeben, z.B. '/Macintosh HD/Users/'. rsync wird nur einmal ausgeführt, wenn du den Befehl im Terminal eingibst und mit Enter bestätigst. Damit der Befehl getriggert wird, muss man auf andere Werkzeuge zurückgreifen (launchd, Ordneraktion,...)
 
Zurück
Oben Unten