Vom Namen der Datei abhängiges Verschieben

Catweasel

Mitglied
Thread Starter
Dabei seit
08.10.2009
Beiträge
16
Reaktionspunkte
0
Hallo.

Ich bin recht neu auf dem Mac und suche folgende Lösung, sei es als Automator-Aktion oder als Terminal-Skript:

Ich habe verschiedene Dateien, welche ich auf Grund des ersten Zeichens des Deteinamens in eine vorgefertigte Ordnerstruktur verschieben will. Unter Dos wäre das für mich keine Problem, doch wie gehe ich sowas auf dem Mac an?

Als Beispiel:
Dateiname ---> Zielverzeichnis
Alle Jahre wieder.xlsx ---> A
Bitte um Hilfe.docx ---> B
.
.
Zu Guter letzt.docx ---> Z

Ist sowas mit dem Automator realisierbar?
Oder aber per Terminal-Skript?
Wenn ja wie?

Danke für jeden Hinweis.

Michi
 
Zuletzt bearbeitet:
Mit AppleScript ist das kein Problem. Sind die Zielverzeichnisse denn bereits vorhanden oder sollen sie erst angelegt werden? Befinden sich die Dateien alle im selben Ordner?
 
Hi Pill.

Danke für die Hilfe.

Die Zielverzeichnisse sind vorhanden, sie befinden sich in /Users/michael/Documents und sind jeweils von A-Z benannt.

Die Dateien werden alle im selben Order abgelegt und sollen dann verschoben werden /Users/michael/Downloads/Docs

Danke im Voraus
Michi
 
Probier das mal aus:

Code:
[FONT="Verdana"][size=2][color=#4C4D4D]--Dateien auswählen[/color]
[b]set[/b] [color=#3F7F00]theseFiles[/color] [b]to[/b] [color=#0016B0][b]choose file[/b][/color] [b]with[/b] [color=#0016B0]multiple selections allowed[/color]
[color=#4C4D4D]--Speicherort festlegen:[/color]
[b]set[/b] [color=#3F7F00]myFolder[/color] [b]to[/b] [color=#0016B0][b]path to[/b][/color] [color=#261151]documents folder[/color] [color=#0016B0]as[/color] [color=#0000FF][i]alias[/i][/color]

[b]repeat[/b] [b]with[/b] [color=#3F7F00]anFile[/color] [b]in[/b] [color=#3F7F00]theseFiles[/color]
	[b]tell[/b] [color=#0000FF][i]application[/i][/color] "Finder"
		[color=#4C4D4D]--Anfangsbuchstabe herausfinden und in Großbuchstaben umwandeln:[/color]
		[b]set[/b] [color=#3F7F00]firstLetter[/color] [b]to[/b] [color=#0000FF][i]item[/i][/color] 1 [b]of[/b] ([color=#6C04D4]name[/color] [b]of[/b] [color=#3F7F00]anFile[/color] [b]as[/b] [color=#0000FF][i]string[/i][/color])
		[b]set[/b] [color=#3F7F00]upperFirstLetter[/color] [b]to[/b] [b]my[/b] [color=#3F7F00]lowerToUpperCase[/color]([color=#3F7F00]firstLetter[/color])
		[color=#4C4D4D]--Falls Zielordner nicht existiert diesen erstellen:[/color]
		[b]try[/b]
			[color=#0000FF][b]make[/b][/color] [color=#0000FF]new[/color] [color=#0000FF][i]folder[/i][/color] [color=#0000FF]at[/color] [color=#3F7F00]myFolder[/color] [color=#0000FF]with properties[/color] {[color=#6C04D4]name[/color]:[color=#3F7F00]upperFirstLetter[/color]}
		[b]end[/b] [b]try[/b]
		[color=#4C4D4D]--Datei verschieben[/color]
		[color=#0000FF][b]move[/b][/color] [color=#3F7F00]anFile[/color] [color=#0000FF]to[/color] [color=#0000FF][i]folder[/i][/color] [color=#3F7F00]upperFirstLetter[/color] [b]of[/b] [color=#3F7F00]myFolder[/color]
	[b]end[/b] [b]tell[/b]
[b]end[/b] [b]repeat[/b]

[b]on[/b] [color=#3F7F00]lowerToUpperCase[/color]([color=#3F7F00]letter[/color])
	[color=#0016B0][b]do shell script[/b][/color] "echo " & [color=#3F7F00]letter[/color] & " | tr [:lower:] [:upper:]"
[b]end[/b] [color=#3F7F00]lowerToUpperCase[/color][/size][/FONT]
 
Hi Pill.

Danke, funktioniert super.
Kann man das Quellverzeichnis auch fix hinterlegen.
repeat with anFile in "Dateien ind diesem Ordner"

Michi

PS:
Kennst Du ein gutes How-To fürs Applescripting, sei es im Netz oder als Buchform?
 
Zuletzt bearbeitet:
Das geht natürlich auch, dazu muss die erste Zeile geändert werden:

Code:
[FONT="Verdana"][size=2][color=#4C4D4D]--Quelldateien:[/color]
[b]tell[/b] [color=#0000FF][i]application[/i][/color] "Finder" [b]to[/b] [b]set[/b] [color=#3F7F00]theseFiles[/color] [b]to[/b] [color=#0000FF][i]files[/i][/color] [b]of[/b] [color=#0000FF][i]alias[/i][/color] ":Users:michael:Downloads:Docs:"
[color=#4C4D4D]--Speicherort festlegen:[/color]
[b]set[/b] [color=#3F7F00]myFolder[/color] [b]to[/b] [color=#0016B0][b]path to[/b][/color] [color=#261151]documents folder[/color] [color=#0016B0]as[/color] [color=#0000FF][i]alias[/i][/color]

[b]repeat[/b] [b]with[/b] [color=#3F7F00]anFile[/color] [b]in[/b] [color=#3F7F00]theseFiles[/color]
	[b]tell[/b] [color=#0000FF][i]application[/i][/color] "Finder"
		[color=#4C4D4D]--Anfangsbuchstabe herausfinden und in Großbuchstaben umwandeln:[/color]
		[b]set[/b] [color=#3F7F00]firstLetter[/color] [b]to[/b] [color=#0000FF][i]item[/i][/color] 1 [b]of[/b] ([color=#6C04D4]name[/color] [b]of[/b] [color=#3F7F00]anFile[/color] [b]as[/b] [color=#0000FF][i]string[/i][/color])
		[b]set[/b] [color=#3F7F00]upperFirstLetter[/color] [b]to[/b] [b]my[/b] [color=#3F7F00]lowerToUpperCase[/color]([color=#3F7F00]firstLetter[/color])
		[color=#4C4D4D]--Falls Zielordner nicht existiert diesen erstellen:[/color]
		[b]try[/b]
			[color=#0000FF][b]make[/b][/color] [color=#0000FF]new[/color] [color=#0000FF][i]folder[/i][/color] [color=#0000FF]at[/color] [color=#3F7F00]myFolder[/color] [color=#0000FF]with properties[/color] {[color=#6C04D4]name[/color]:[color=#3F7F00]upperFirstLetter[/color]}
		[b]end[/b] [b]try[/b]
		[color=#4C4D4D]--Datei verschieben[/color]
		[color=#0000FF][b]move[/b][/color] [color=#3F7F00]anFile[/color] [color=#0000FF]to[/color] [color=#0000FF][i]folder[/i][/color] [color=#3F7F00]upperFirstLetter[/color] [b]of[/b] [color=#3F7F00]myFolder[/color]
	[b]end[/b] [b]tell[/b]
[b]end[/b] [b]repeat[/b]

[b]on[/b] [color=#3F7F00]lowerToUpperCase[/color]([color=#3F7F00]letter[/color])
	[color=#0016B0][b]do shell script[/b][/color] "echo " & [color=#3F7F00]letter[/color] & " | tr [:lower:] [:upper:]"
[b]end[/b] [color=#3F7F00]lowerToUpperCase[/color][/size][/FONT]


Für Literaturempfehlungen schau mal hier rein:

https://www.macuser.de/forum/f30/literaturempfehlungen-582304/
https://www.macuser.de/forum/f30/literatur-automator-apple-627928/
 
Ergänzungsfrage zum Umgang mit Strings

Hallo.

Ich suche noch folgende Befehle, die ich irgenwie nicht finde und aus VB kenne:
Left
Right
Mid

Dabei jeweils eine bestimmte Anzahl von Zeichen extrahieren.
Left(String,3) z.B. die ersten 3 Zeichen.

Hab was gefunden mit "Character 1 to 3", allerdings krieg ich das hier nicht zum laufen.

Danke
Michi
 
Ein "Left", "Right" oder "Mid" gibt es meines Wissens nach nicht, die ersten oder letzten Zeichen eines Strings lassen sich aber so extrahieren:

Code:
[FONT="Verdana"][size=2][b]set[/b] [color=#3F7F00]myString[/color] [b]to[/b] "abcdefghijklmnopqrstuvwxyz"
[color=#4C4D4D]-- Gibt die ersten 3 Zeichen aus (als Liste), deshalb müssen wir das am Schluss[/color]
[color=#4C4D4D]-- noch als String umwandeln:[/color]
[b]set[/b] [color=#3F7F00]firstThreeCharacters[/color] [b]to[/b] [color=#0000FF][i]characters[/i][/color] 1 [b]thru[/b] 3 [b]of[/b] [color=#3F7F00]myString[/color] [b]as[/b] [color=#0000FF][i]string[/i][/color]
[color=#4C4D4D]-- Gibt die letzten 3 Zeichen aus (item -1 ist immer das letzte Zeichen):[/color]
[b]set[/b] [color=#3F7F00]lastThreeCharacters[/color] [b]to[/b] [color=#0000FF][i]characters[/i][/color] -3 [b]thru[/b] -1 [b]of[/b] [color=#3F7F00]myString[/color] [b]as[/b] [color=#0000FF][i]string[/i][/color][/size][/FONT]
 
Ähem, zum Problem weiter oben:

AppleScript ist ja schön, aber wie wäre es im Terminal mit

mv /mein/quellverzeichnis/[Aa]* /mein/zielverzeichnis
mv /mein/quellverzeichnis/[Bb]* /mein/andereszielverzeichnis

?

Scheint mir ein klein wenig kürzer.
 
Scheint mir ein klein wenig kürzer.

Nicht wenn ich das für jeden Buchstaben im Alphabet eintippen muss ;)

Nein, du hast natürlich recht, im Terminal geht alles schneller, dann aber bitte mir for-Schleife o.ä.:

Code:
cd /MeinOrdner/;
for i in *;
   do firstLetter=$(echo $i | cut -c 1 | tr [:lower:] [:upper:]);
   mv $i /Zielordner/$firstLetter;
done;
 
Zurück
Oben Unten