Bất kỳ cách nào để đặt / thêm thẻ trên một tệp bằng Applescript trong Mavericks?


9

Cố gắng chuyển một số tập lệnh của tôi từ nhãn sang thẻ trong Mavericks, nhưng tôi dường như không thể tìm cách đặt / thêm thẻ bằng Applescript.

Bất cứ ai biết làm điều này? Theo như tôi có thể hình dung các thẻ không thực sự mới, chỉ mới về mặt là một phần trung tâm hơn của Finder được cập nhật.

Câu trả lời:


7

Bạn có thể sử dụng xattr. Điều này sao chép các thẻ từ file1 sang 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

Các thẻ được lưu trữ trong một danh sách thuộc tính dưới dạng một chuỗi các chuỗi:

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

Các thẻ cho màu sắc có các giá trị như Red\n6(trong đó \nlà một nguồn cấp dữ liệu).

Nếu cờ kColor trong com.apple. DownloaderInfo không được đặt, Finder sẽ không hiển thị các vòng tròn cho màu bên cạnh các tệp. Nếu cờ kColor được đặt thành màu cam và tệp có thẻ màu đỏ, Finder sẽ hiển thị cả vòng tròn màu đỏ và màu cam. Bạn có thể đặt cờ kColor bằng 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")' là cú pháp plist kiểu cũ cho việc này:

<?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-29in giá trị của các bit được sử dụng cho cờ kColor. Màu đỏ là C, màu cam là E, màu vàng là A, màu xanh lá cây là 4, màu xanh là 8, màu đỏ là 6 và màu xám là 2. (Cờ sẽ thêm 1 vào các giá trị không được sử dụng trong OS X.)


"hình ảnh thẻ" .PNG hoặc đồ họa được tô màu? không thể tìm thấy cái gì đó như "C.png" trên đĩa cứng :)

1

Câu trả lời đã được đăng trên danh sách người dùng Applescript:

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


trích dẫn từ trang mã được viết bởi Shane Stanley

Bạn có thể làm điều đó đủ dễ dàng với AppleScriptObjC. Đây là trình xử lý để truy xuất thẻ, đặt thẻ và thêm thẻ:

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:

Nếu bạn lưu chúng trong thư viện tập lệnh, bạn cũng có thể sử dụng chúng từ Mavericks.

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.