一部のスクリプトをラベルからMavericksの下のタグに移動しようとしていますが、Applescriptでタグを設定/追加する方法を見つけられないようです。
これを行う方法を知っている人はいますか?私の知る限り、タグは実際には新しいものではなく、更新されたFinderのより中心的な部分であるという点で新しいだけです。
一部のスクリプトをラベルからMavericksの下のタグに移動しようとしていますが、Applescriptでタグを設定/追加する方法を見つけられないようです。
これを行う方法を知っている人はいますか?私の知る限り、タグは実際には新しいものではなく、更新されたFinderのより中心的な部分であるという点で新しいだけです。
回答:
xattrを使用できます。これにより、タグがfile1から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
タグは、文字列の単一の配列としてプロパティリストに保存されます。
$ 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>
色のタグには次のような値がありますRed\n6
(\n
は改行です)。
com.apple.FinderInfoのkColorフラグが設定されていない場合、Finderはファイルの横にある色の円を表示しません。kColorフラグがオレンジに設定されていて、ファイルに赤いタグが付いている場合、Finderは赤い円とオレンジの円の両方を表示します。AppleScriptでkColorフラグを設定できます。
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")'
これは古いスタイルのplist構文です:
<?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-29
kColorフラグに使用されるビットの値を出力します。赤はC、オレンジはE、黄色はA、緑は4、青は8、マゼンタは6、灰色は2です(値に1を加えるフラグはOS Xでは使用されません)。
答えはApplescriptユーザーリストに投稿されています。
http://lists.apple.com/archives/applescript-users/2015/Jan/msg00193.html
シェーン・スタンレーによって書かれたページコードからの引用
AppleScriptObjCを使用すれば、十分簡単に行うことができます。タグの取得、タグの設定、およびタグの追加を行うハンドラーを次に示します。
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:
スクリプトライブラリに保存すると、Mavericksからも使用できます。
-シェーンスタンレーwww.macosxautomation.com/applescript/apps/