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
Shane Stanley가 작성한 페이지 코드에서 인용
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:
스크립트 라이브러리에 저장하면 매버릭스에서도 사용할 수 있습니다.
-Shane Stanley www.macosxautomation.com/applescript/apps/