Adakah cara untuk mengatur / menambahkan tag pada file dengan Applescript di bawah Mavericks?

9

Mencoba untuk memindahkan beberapa skrip saya dari label ke tag di bawah Mavericks, tetapi sepertinya saya tidak dapat menemukan cara untuk mengatur / menambahkan tag dengan Applescript.

Adakah yang tahu bagaimana melakukan ini? Sejauh yang saya tahu, tag sebenarnya tidak baru, hanya baru dalam hal menjadi bagian yang lebih sentral dari Finder yang diperbarui.

Christian A. Strømmen
sumber

Jawaban:

7

Anda bisa menggunakan xattr. Ini menyalin tag dari file1 ke file2:

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

Tag disimpan dalam daftar properti sebagai satu larik string:

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

Tag untuk warna memiliki nilai seperti Red\n6(di mana \numpan baris).

Jika bendera kColor di com.apple.FinderInfo tidak disetel, Finder tidak menampilkan lingkaran untuk warna di sebelah file. Jika bendera kColor diatur ke oranye dan file memiliki tag merah, Finder menunjukkan lingkaran merah dan oranye. Anda dapat mengatur bendera kColor dengan AppleScript:

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")' adalah sintaks plist gaya lama untuk ini:

<?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-29mencetak nilai bit yang digunakan untuk bendera kColor. Merah adalah C, oranye adalah E, kuning adalah A, hijau adalah 4, biru adalah 8, magenta adalah 6, dan abu-abu adalah 2. (Bendera yang akan menambahkan 1 ke nilai-nilai tidak digunakan dalam OS X.)

Lri
sumber
Apakah "gambar tag" .PNGs atau gambar yang dirender warna? tidak dapat menemukan sesuatu seperti "C.png" pada harddisk :)
1

Jawabannya telah diposting di daftar pengguna Applescript:

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


kutipan dari kode halaman yang ditulis oleh Shane Stanley

Anda dapat melakukannya dengan cukup mudah dengan AppleScriptObjC. Berikut adalah penangan untuk mengambil tag, mengatur tag, dan menambahkan tag:

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:

Jika Anda menyimpannya di pustaka skrip, Anda juga dapat menggunakannya dari Mavericks.

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

brandelune
sumber