Mavericks altında Applescript ile bir dosyada etiket ayarlamak / eklemek için herhangi bir yol var mı?


9

Komut dosyalarımızdan bazılarını Mavericks altındaki etiketlerden etiketlere taşımaya çalışıyorum, ancak Applescript ile etiket ayarlamak / eklemek için bir yol bulamıyorum.

Bunu nasıl yapacağını bilen var mı? Görebildiğim kadarıyla etiketler aslında yeni değil, sadece güncellenen Finder'ın daha merkezi bir parçası olması açısından yeni.

Yanıtlar:


7

Xattr kullanabilirsiniz. Bu, etiketleri dosya1'den dosya2'ye kopyalar:

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

Etiketler, özellik listesinde tek bir dizgi dizisi olarak saklanır:

$ 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>

Renkler için etiketlerin değerleri Red\n6(burada \nsatır besleme) vardır.

Com.apple.FinderInfo içindeki kColor bayrağı ayarlanmamışsa, Finder dosyaların yanındaki renklerin dairelerini göstermez. KColor bayrağı turuncuya ayarlanmışsa ve dosyada kırmızı etiket varsa, Finder hem kırmızı hem de turuncu daireleri gösterir. AppleCo ile kColor bayrağını ayarlayabilirsiniz:

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")' bunun için eski stil plist sözdizimidir:

<?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-29kColor bayrağı için kullanılan bitlerin değerini yazdırır. Kırmızı C, turuncu E, sarı A, yeşil 4, mavi 8, macenta 6 ve gri 2'dir. (Değerlere 1 ekleyecek olan bayrak OS X'te kullanılmaz.)


etiketi görüntüleri .PNG'ler veya renkle oluşturulmuş grafikler nelerdir? sabit diskte "C.png" gibi bir şey bulamadı :)

1

Cevap Applescript kullanıcı listesine gönderildi:

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


Shane Stanley tarafından yazılan sayfa kodundan alıntı

AppleScriptObjC ile kolayca yapabilirsiniz. Etiketleri almak, etiketleri ayarlamak ve etiket eklemek için işleyiciler şunlardır:

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:

Bunları bir komut dosyası kitaplığına kaydederseniz, bunları Mavericks'ten de kullanabilirsiniz.

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.