Gibt es eine Möglichkeit, Tags in einer Datei mit Applescript unter Mavericks festzulegen / hinzuzufügen?


9

Ich habe versucht, einige meiner Skripte unter Mavericks von Labels zu Tags zu verschieben, aber ich kann anscheinend keine Möglichkeit finden, Tags mit Applescript festzulegen / hinzuzufügen.

Wer weiß, wie man das macht? Soweit ich das beurteilen kann, sind Tags nicht wirklich neu, sondern nur neu, da sie ein zentraler Bestandteil des aktualisierten Finders sind.

Antworten:


7

Sie können xattr verwenden. Dadurch werden die Tags von Datei1 nach Datei2 kopiert:

xattr -wx com.apple.metadata:_kMDItemUserTags "$(xattr -px com.apple.metadata:_kMDItemUserTags file1)" file2
xattr -wx com.apple.FinderInfo "$(xattr -px com.apple.FinderInfo file1)" file2

Die Tags werden in einer Eigenschaftsliste als einzelnes Array von Zeichenfolgen gespeichert:

$ xattr -p com.apple.metadata:_kMDItemUserTags file3|xxd -r -p|plutil -convert xml1 - -o -
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <string>Red
6</string>
    <string>aa</string>
    <string>Orange
7</string>
    <string>Yellow
5</string>
    <string>Green
2</string>
    <string>Blue
4</string>
    <string>Purple
3</string>
    <string>Gray
1</string>
</array>
</plist>

Die Tags für Farben haben Werte wie Red\n6(wo \nist ein Zeilenvorschub).

Wenn das kColor-Flag in com.apple.FinderInfo nicht gesetzt ist, zeigt Finder die Kreise für Farben neben Dateien nicht an. Wenn das kColor-Flag auf Orange gesetzt ist und die Datei das rote Tag hat, zeigt der Finder sowohl rote als auch orangefarbene Kreise an. Sie können das kColor-Flag mit AppleScript setzen:

do shell script "xattr -w com.apple.metadata:_kMDItemUserTags '(\"Red\\n6\",\"new tag\")' ~/desktop/file4"
tell application "Finder" to set label index of file "file4" of desktop to item 1 of {2, 1, 3, 6, 4, 5, 7}

'("Red\n6","new tag")' ist dafür eine Plist-Syntax im alten Stil:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <string>Red
6</string>
    <string>new tag</string>
</array>
</plist>

xattr -p com.apple.FinderInfo file|head -n1|cut -c28-29Gibt den Wert der für das kColor-Flag verwendeten Bits aus. Rot ist C, Orange ist E, Gelb ist A, Grün ist 4, Blau ist 8, Magenta ist 6 und Grau ist 2. (Das Flag, das 1 zu den Werten hinzufügen würde, wird in OS X nicht verwendet.)


sind die "Tag-Bilder" .PNGs oder farbgerenderte Grafiken? konnte so etwas wie "C.png" nicht auf der Festplatte finden :)

1

Die Antwort wurde in der Applescript-Benutzerliste veröffentlicht:

http://lists.apple.com/archives/applescript-users/2015/Jan/msg00193.html


Zitat aus dem Seitencode von Shane Stanley

Mit AppleScriptObjC können Sie dies problemlos tun. Hier sind Handler zum Abrufen von Tags, Festlegen von Tags und Hinzufügen von Tags:

use scripting additions
use framework "Foundation"

on returnTagsFor:posixPath -- get the tags
    set aURL to current application's |NSURL|'s fileURLWithPath:posixPath -- make URL
    set {theResult, theTags} to aURL's getResourceValue:(reference) forKey:(current application's NSURLTagNamesKey) |error|:(missing value)
    if theTags = missing value then return {} -- because when there are none, it returns missing value
    return theTags as list
end returnTagsFor:

on setTags:tagList forPath:posixPath -- set the tags, replacing any existing tags
    set aURL to current application's |NSURL|'s fileURLWithPath:posixPath -- make URL
    aURL's setResourceValue:tagList forKey:(current application's NSURLTagNamesKey) |error|:(missing value)
end setTags:forPath:

on addTags:tagList forPath:posixPath -- add to existing tags
    set aURL to current application's |NSURL|'s fileURLWithPath:posixPath -- make URL
    -- get existing tags
    set {theResult, theTags} to aURL's getResourceValue:(reference) forKey:(current application's NSURLTagNamesKey) |error|:(missing value)
    if theTags  missing value then -- add new tags
        set tagList to (theTags as list) & tagList
        set tagList to (current application's NSOrderedSet's orderedSetWithArray:tagList)'s allObjects() -- delete any duplicates
    end if
    aURL's setResourceValue:tagList forKey:(current application's NSURLTagNamesKey) |error|:(missing value)
end addTags:forPath:

Wenn Sie sie in einer Skriptbibliothek speichern, können Sie sie auch von Mavericks verwenden.

- Shane Stanley www.macosxautomation.com/applescript/apps/

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.