Tags in OS 10.9 mit AppleSkript oder Automator setzen

jhsenator

jhsenator

Aktives Mitglied
Thread Starter
Dabei seit
18.02.2008
Beiträge
651
Reaktionspunkte
66
Seit OS 10.9 kann man ja jetzt einzelnen Dateien Tags zuordnen. Meine Frage ist es auch möglich mit AppleSkript solche Tags zu setzen? Wenn ja, wie müsste das Skript aussehen? Ich möchte meine Bestandsdateien mit Tags versehen.

Danke für Eure Antworten
Juergen
 
Hallo,
ich hänge mich hier mal an.
Ich habe eine Ordneraktion mit dem Automator für den Bilder-Ordner erstellt, so das wenn eine .jpg Datei in diesen Ordner verschoben wird diese automatisch getagt wird.
Leider besteht im Automator nur die Möglichkeit die Standardtags von OSX zu vergeben und nicht meine angepassten bzw. selbst erstellten.
Besteht die Möglichkeit dieses zu ändern? Also .jpg Datei in den Ordner Bilder verschieben und automatisch mit dem Tag "Bilder" zu versehen.
 
Nicht ausprobiert, aber hier scheint jemand ein Kommandozeilenprogramm veröffentlicht zu haben, das die offiziellen APIs nutzt. Das wäre ja dann auch relativ unproblematisch aus Applescript/Automator heraus zu benutze
 
Mir ist eingefallen, dass Mavericks ja nun Applescript-Libraries unterstützt. Da diese ASObjC verwenden dürfen, lässt sich die Aufgabe mit der NSURL-Klasse ohne große Umwege lösen, dem Prinzip nach wie beim im vorherigen Beitrag verlinkten Kommandozeilenprogramm. Ohne Gewähr hier mein Ansatz…

Das Ganze einfach als Script-Bundle unter bspw. “Tags.scptd” in ~/Library/Script Libraries/ speichern (im Applescript-Editor in den “Paketinhalt”-Einstellungen bei “AppleScript/Objective-C Library” einen Haken setzen.
Sodann kann aus jedem gewöhnlichen Applescript heraus auf die Tagging-Funktionalität in folgender Art und Weise zugegriffen werden:

Code:
[COLOR=#000000][FONT=Verdana][B]set[/B] [/FONT][/COLOR][COLOR=#4F8F00][FONT=Verdana]theFile[/FONT][/COLOR][COLOR=#000000][FONT=Verdana] [B]to[/B] [/FONT][/COLOR][B]choose file
[/B][B]tell [/B][COLOR=#0433FF][FONT=Verdana][I]script[/I][/FONT][/COLOR][FONT=Verdana] "Tags" [/FONT][B]to [/B][COLOR=#4F8F00][FONT=Verdana]addTags[/FONT][/COLOR][FONT=Verdana]:{"X", "Y", "Z"} [/FONT][COLOR=#4F8F00][FONT=Verdana]toFile[/FONT][/COLOR][FONT=Verdana]:[/FONT][COLOR=#4F8F00][FONT=Verdana]theFile[/FONT][/COLOR]
 
  • Gefällt mir
Reaktionen: Rubens und varuna
Hallo, kannst Du das nochmals so darstellen, dass auch jemand relativ Unbedarftes das Speichern in der Library nachvollziehen und realisieren kann.

Danke Juergen
 
Du klickst auf das verzinkte AppleScript von oben (klick) und bestätigst, dass du das Skript im AppleScript-Editor öffnen möchtest, obwohl kermitd kein verifizierter Entwickler ist.
Dann speicherst du das Skript im Ordner ~/Library/Script Libraries/ als Skript-Bundle mit dem Namen "Tags". Jetzt kannst du im Skript-Editor oben rechts den Bundle-Inhalt öffnen und das Häkchen bei "AppleScript/Objective-C-Bibliothek" setzen und danach das Skript erneut speichern.

Dann kannst du in jedem beliebigen AppleScript die Tags für eine Datei setzen mit:
tell script "Tags" to addTags:{"X", "Y", "Z"} toFile:alias ":pfad:zur:Datei"
 
  • Gefällt mir
Reaktionen: mausfang und Rubens
Wow!
Vielen Dank an kermitd!

Das ist sehr nützlich (und mal wieder auch sehr lehrreich!)
Habe ich mir gleich als Dienst mit Tags-Auswahl eingerichtet :)

Gruß
 
Hallo Pill, danke für die Information. Das funktioniert super. Den Ordner "Script Libraries" gab es zwar noch nicht in meiner System-Library, ich habe ihn neu angelegt. Alles andere hat wie von dir beschrieben funktioniert. Besten Dank nochmals.

Gruß Juergen
 
:) Sagt Bescheid, falls ihr Fehler entdeckt.

Was z.B. sicherheitshalber noch hinzugefügt werden sollte, ist, dass Leerzeichen vom Anfang und Ende übergebener Tags entfernt werden, wie es auch in Apples Benutzeroberfläche automatisch passiert. Ein Tag der Länge 0, bzw. ein lediglich aus Leerzeichen bestehender Tag sollte ebenso nicht akzeptiert werden. Seltsamerweise funktioniert Letzteres bei Apples eigener Oberfläche, mit der Folge, dass ein leeres String-Element in die Metadaten geschrieben wird. Aber ist wohl einfach ein kleiner Bug von Apple, der auch keine Probleme zu verursachen scheint...
 
Hallo Kermitd, danke für Deine Information. Dein Skript funktioniert tadellos. Ich habe nur noch keinen vernünftigen Weg gefunden auch meine Mails so mit Tags zu versehen, dass ich z.B. einen intelligenten Ordner erstellen kann in dem alle einem Projekt zugeordneten Dateien aber auch alle e-mails enthalten sind. Aber jetzt bin ich erstmal dabei meine ganzen Projektdateien zu taggen.
 
Gern. Interessante Frage mit den Mails. Das wäre sicher eine nützliche Funktion. Du kannst per Applescript die ID der (bspw.) ersten markierten Mail nach folgendem Muster rauskriegen :
Code:
tell application "Mail" to get the id of the first item of the (get selected messages of the first message viewer)


Man könnte nun (am bequemsten natürlich ohne nötige Benutzerintervention) eine Spotlight-Suche nach der ID inkl. ".emlx"-Anhängsel anstoßen, und die resultierende Datei dem Skript übergeben.
 
Jetzt hat's mich doch grad gejuckt, auch weil ich selber gern die Funktion hätte... :d

Wäre sicher noch Fehlerbehandlung nötig, aber für's Erste funktioniert das (bei mir):

Code:
[FONT=Verdana][B]tell[/B] [COLOR=#0433ff][I]application[/I][/COLOR] "Mail" [B]to[/B] ([B]get[/B] [COLOR=#812fdc]selected messages[/COLOR] [B]of[/B] [B]the[/B] [B]first[/B] [COLOR=#0433ff][I]message viewer[/I][/COLOR])[/FONT]
[FONT=Verdana][B]repeat[/B] [B]with[/B] [COLOR=#4f8f00]aMessage[/COLOR] [B]in[/B] [B]every[/B] [COLOR=#0433ff][I]item[/I][/COLOR] [B]of[/B] [B]the[/B] [COLOR=#812fdc]result[/COLOR][/FONT]
[FONT=Verdana]    [B]set[/B] [COLOR=#4f8f00]theFile[/COLOR] [B]to[/B] [COLOR=#012fbe][B]do shell script[/B][/COLOR] "mdfind " & "\"kMDItemFSName == '" & ([COLOR=#812fdc]id[/COLOR] [B]of[/B] [COLOR=#4f8f00]aMessage[/COLOR]) & ".emlx'\""[/FONT]
[FONT=Verdana]    [B]if[/B] [B]the[/B] [COLOR=#812fdc]result[/COLOR] [B]is[/B] "" [B]then[/B][/FONT]
[FONT=Verdana]        [B]set[/B] [COLOR=#4f8f00]theFile[/COLOR] [B]to[/B] [COLOR=#012fbe][B]do shell script[/B][/COLOR] "mdfind " & "\"kMDItemFSName == '" & ([COLOR=#812fdc]id[/COLOR] [B]of[/B] [COLOR=#4f8f00]aMessage[/COLOR]) & ".partial.emlx'\""[/FONT]
[FONT=Verdana]    [B]end[/B] [B]if[/B][/FONT]
[FONT=Verdana]    [B]tell[/B] [COLOR=#0433ff][I]script[/I][/COLOR] "Tags" [B]to[/B] [COLOR=#4f8f00]addTags[/COLOR]:{"X", "Y", "Z"} [COLOR=#4f8f00]toFile[/COLOR]:([COLOR=#012fbe][I]POSIX file[/I][/COLOR] [COLOR=#4f8f00]theFile[/COLOR] [B]as[/B] [COLOR=#0433ff][I]alias[/I][/COLOR])[/FONT]
[FONT=Verdana][B]end[/B] [B]repeat[/B][/FONT]
 
Ich hab' mal ein Scripting Dictionary für drei Kommandos hinzugefügt, damit die Library etwas schöner zu benutzen ist, und zwar in folgender Form:

Code:
[COLOR=#0433FF][FONT=Verdana][COLOR=#000000][B]use[/B] [/COLOR][I]scripting additions[/I][/FONT][/COLOR]
[FONT=Verdana][B]use[/B] [COLOR=#0433ff][I]script[/I][/COLOR] "Tags"[/FONT]
[FONT=Verdana]
[/FONT]
[COLOR=#012FBE][FONT=Verdana][B]add tags[/B][COLOR=#000000] {"X", "Y", "Z"} [/COLOR]to[COLOR=#000000] ([/COLOR][B]choose file[/B][COLOR=#000000])[/COLOR][/FONT][/COLOR]
[COLOR=#012FBE][FONT=Verdana][B]retrieve tags from[/B][COLOR=#000000] ([/COLOR][B]choose file[/B][COLOR=#000000])[/COLOR][/FONT][/COLOR]
[COLOR=#012FBE][FONT=Verdana][B]tag selected mail messages with[/B][COLOR=#000000] {"X", "Y", "Z"}[/COLOR][/FONT][/COLOR]

Nachzuschlagen in der Bibliothek des AppleScript-Editors, nachdem dort die Datei Tags.scptd hinzugefügt wurde.

sdef.jpg
 
Hallo,

@kermitd
Wunderbar! :thumbsup:

Eine kleine Anmerkung bzw. Bitte:
In den früheren Versionen, konnte man ja vorhande Tags und/oder neue Tags hinzufügen und diesen neuen Tags nach dem Schema des von Pill verlinkten Threads auch gleich eine Farbe zuweisen (z.B. "Test\r7") ... das geht ja nun ja nicht mehr. Erstens möchte ich nicht in deiner Arbeit herum pfuschen und zweitens hast du bestimmt eine bessere Idee, wie man das sinnvoll wieder integrieren könnte.

Und eine Frage: Gibt es eine Möglichkeit, alle vorhanden Tags (nicht eines Objektes sondern allgemein vorhanden) auszulesen?

Gruß
Varuna
 
In den früheren Versionen, konnte man ja vorhande Tags und/oder neue Tags hinzufügen und diesen neuen Tags nach dem Schema des von Pill verlinkten Threads auch gleich eine Farbe zuweisen (z.B. "Test\r7")
Ich weiß (bisher) nicht, ob oder wie es möglich ist, die systemweite Zuweisung einer Farbe an bestimmte Tags per Code zu ändern (was ja dann auch direkt an alle Dateien mit entsprechendem Tag verbreitet werden müsste).

Was ich nur für begrenzt sinnvoll halte - und so verstehe ich Deine Anmerkung gerade (korrigier mich, wenn ich da falsch liege) - ist, für jede Datei individuell festzulegen, welche Farbe nur dort einem bestimmten Tag zugeordnet sein soll. Denn dann ist die Zuordnung der Farbe zum Tag ja nicht mehr eindeutig? Zugegebenermaßen existier das Problem so oder so... Was Du in jedem Fall machen kannst, ist das (legacy)-Finder-Label zuzuordnen und abzurufen. Auch direkt per Applescript, das ist mir aber erst bewusst geworden, als ich die zwei ASObjC-Methoden bereits geschrieben hatte. :p

Gibt es eine Möglichkeit, alle vorhanden Tags (nicht eines Objektes sondern allgemein vorhanden) auszulesen?
Wüsste ich auch gerne. :)

EDIT:

Eine kleine Warnung noch bzgl des Taggings von Mail-Nachrichten. Sobald die Mails in einen anderen Ordner verschoben werden (und möglicherweise auch bei anderen Aktionen), wird die korrespondierende Datei anscheinend neu geschrieben und verliert somit ihre Tags. :(
 
Die vorhandenen Tags bekommt man so:

mdls -name kMDItemUserTags $(mdfind "kMDItemUserTags == *" ) | grep -o ' .*[^,]' | uniq | sed 's/ //g'

Aber ob das der einfachste Weg ist?


 
Hallo,

@Pill: danke, das funktioniert! - einfach hin oder her :) - ... nur Umlaute werden natürlich falsch dargestellt.
Ich würde das hinbekommen, das abzufangen, doch eventuell kann man das ja schon im "Vorfeld" erledigen... mit iconv ?

@kermitd
meine Anmerkung galt tatsächlich der System, bzw. User-weiten Zuordnung einer Farbe zu bestimmten Tags.
Und um genau zu sein, Zuordnung einer Farbe zu den gerade neu erstellten Tags. Und das ging, wie beschrieben mit dem Zusatz des "LabelNumberKeys". Tag-Absatz-Farbnummer:
tell script "Tags" to addTags:{"Neu\r7"} toFile:theFile


Ich weiß (bisher) nicht, ob oder wie es möglich ist, die systemweite Zuweisung einer Farbe an bestimmte Tags per Code zu ändern (was ja dann auch direkt an alle Dateien mit entsprechendem Tag verbreitet werden müsste).
Das wäre ein Schritt weiter, als ich gemeint habe, und irgendwie auch unnötig...

Gruß


Ach ja, was mir an den neuen Tags aufgefallen ist:
Getaggte Objekte im ~/Library/Preferences Ordner werden vom Finder nicht erfasst... :confused:
 
Hallo Kermitd und Pill, ich wollte euern Lösungsweg ausprobieren, da ich großes Interesse habe, die Finder-Tags per Skript zu vergeben. Also die mit den Tag-Begriffen. Nur leider funktioniert der Link zu dem Skript von Kermitd nicht. Safari will mir das als Link zu einer Webseite auflösen, aber eigentlich sollte wohl der Skript-Editor starten, wenn ich das richtig verstanden habe. Firefox kann auch nichts damit anfangen. Wie kann ich da ran kommen? Kann das einer von euch bitte noch mal posten? Das wäre sehr nett :)

Und da der Thread schon etwas älter ist, habe ich übrigens mittlerweile Yosemite 10.10.4 auf dem Rechner. Falls es neuere, bessere oder erprobtere Möglichkeiten für das skriptbasierte Taggen mit Apple Skript gibt, wäre ich natürlich auch dankbar für Tipps.

Mir ist eingefallen, dass Mavericks ja nun Applescript-Libraries unterstützt. Da diese ASObjC verwenden dürfen, lässt sich die Aufgabe mit der NSURL-Klasse ohne große Umwege lösen, dem Prinzip nach wie beim im vorherigen Beitrag verlinkten Kommandozeilenprogramm. Ohne Gewähr hier mein Ansatz…



Das Ganze einfach als Script-Bundle unter bspw. “Tags.scptd” in ~/Library/Script Libraries/ speichern (im Applescript-Editor in den “Paketinhalt”-Einstellungen bei “AppleScript/Objective-C Library” einen Haken setzen.

Sodann kann aus jedem gewöhnlichen Applescript heraus auf die Tagging-Funktionalität in folgender Art und Weise zugegriffen werden:



Code:
[COLOR=#000000][FONT=Verdana][B]set[/B] [/FONT][/COLOR][COLOR=#4F8F00][FONT=Verdana]theFile[/FONT][/COLOR][COLOR=#000000][FONT=Verdana] [B]to[/B] [/FONT][/COLOR][B]choose file

tell [/B][COLOR=#0433FF][FONT=Verdana][I]script[/I][/FONT][/COLOR][FONT=Verdana] "Tags" [/FONT][B]to [/B][COLOR=#4F8F00][FONT=Verdana]addTags[/FONT][/COLOR][FONT=Verdana]:{"X", "Y", "Z"} [/FONT][COLOR=#4F8F00][FONT=Verdana]toFile[/FONT][/COLOR][FONT=Verdana]:[/FONT][COLOR=#4F8F00][FONT=Verdana]theFile[/FONT][/COLOR]



Du klickst auf das verzinkte AppleScript von oben (klick) und bestätigst, dass du das Skript im AppleScript-Editor öffnen möchtest, obwohl kermitd kein verifizierter Entwickler ist.

Dann speicherst du das Skript im Ordner ~/Library/Script Libraries/ als Skript-Bundle mit dem Namen "Tags". Jetzt kannst du im Skript-Editor oben rechts den Bundle-Inhalt öffnen und das Häkchen bei "AppleScript/Objective-C-Bibliothek" setzen und danach das Skript erneut speichern.



Dann kannst du in jedem beliebigen AppleScript die Tags für eine Datei setzen mit:

tell script "Tags" to addTags:{"X", "Y", "Z"} toFile:alias "fad:zuratei"


PS. Falls jemand eine einfache Möglichkeit sucht, nur die Farb-Label per einfachem Skript zu vergeben (Achtung: immer nur einer zur Zeit), könnte ich das hier anbieten. Ich habe mir die Skripte für die einzelnen Farben mit schönen Icons versehen und sie direkt ins obere Menü vom Finderfenster gezogen. Das funktioniert bei mir wunderbar. Allerdings nur bei den Farb-Labeln.

Code:
tell application "Finder"
    set thisItem to selection as alias
    if label index of thisItem = 0 then
        set the label index of thisItem to 1 -- 1 = orange
    else
        set label index of thisItem to 0 -- 0 = kein Etikett
    end if
end tell
 
Zuletzt bearbeitet:
Hallo Kermitd und Pill, ich wollte euern Lösungsweg ausprobieren, da ich großes Interesse habe, die Finder-Tags per Skript zu vergeben. Also die mit den Tag-Begriffen. Nur leider funktioniert der Link zu dem Skript von Kermitd nicht. Safari will mir das als Link zu einer Webseite auflösen, aber eigentlich sollte wohl der Skript-Editor starten, wenn ich das richtig verstanden habe. Firefox kann auch nichts damit anfangen. Wie kann ich da ran kommen? Kann das einer von euch bitte noch mal posten? Das wäre sehr nett :)
Hi - die neue Forum-Software scheint die AppleScript-Links zerschossen zu haben. Aber der Link aus Beitrag #14 mit der neuesten Version meines Ansatzes sollte noch funktionieren. Die heruntergeladene (entpackte) Tags.scptd-Library einfach in ~/Library/Script Libraries/ kopieren. Danach kannst Du die Tags in folgender Weise setzen bzw. abrufen:

use script "Tags"
use scripting additions

set someFile to choose file
add tags
{"dies", "das"} to someFile
retrieve tags from someFile
 
  • Gefällt mir
Reaktionen: mausfang
Zurück
Oben Unten