เป็นไปได้หรือไม่ที่จะติดแท็กไฟล์หรือโฟลเดอร์ใน mavericks ผ่านคำสั่ง terminal?
เป็นไปได้หรือไม่ที่จะติดแท็กไฟล์หรือโฟลเดอร์ใน mavericks ผ่านคำสั่ง terminal?
คำตอบ:
คุณสามารถใช้ 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>new tag</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>
หากการตั้งค่าสถานะ kColor ใน com.apple.FinderInfo ไม่ได้ตั้งค่า Finder จะไม่แสดงวงกลมสำหรับสี หากการตั้งค่าสถานะ kColor เป็นสีส้มและไฟล์มีแท็กสีแดง Finder จะแสดงทั้งวงกลมสีแดงและสีส้ม คุณสามารถตั้งค่าสถานะ kColor ด้วย AppleScript:
xattr -w com.apple.metadata:_kMDItemUserTags '("Red\n6","new tag")' ~/desktop/file4;osascript -e 'on run {a}' -e 'tell app "Finder" to set label index of (POSIX file a as alias) to item 1 of {2, 1, 3, 6, 4, 5, 7}' -e end ~/desktop/file4
xattr -p com.apple.FinderInfo file|head -n1|cut -c28-29
พิมพ์ค่าของบิตที่ใช้สำหรับการตั้งค่าสถานะ kColor สีแดงคือ C, สีส้มคือ E, สีเหลืองคือ A, สีเขียวคือ 4, สีฟ้าคือ 8, สีม่วงแดงคือ 6, และสีเทาคือ 2 ธงที่จะเพิ่ม 1 ในค่าที่ไม่ได้ใช้ใน OS X
แก้ไข: คุณสามารถใช้แท็ก :
tag -l file # list
tag -a tag1 file # add
tag -s red,blue file # set
tag -r \* file # remove all tags
tag -f green # find all files with the green tag
tag -f \* # find all files with tags
tag -m red * # match (print files in * that have the red tag)
แท็กสามารถติดตั้งได้ด้วยหรือbrew install tag
sudo port install tag
$ tag -h
tag - A tool for manipulating and querying file tags.
usage:
tag -a | --add <tags> <file>... Add tags to file
tag -r | --remove <tags> <file>... Remove tags from file
tag -s | --set <tags> <file>... Set tags on file
tag -m | --match <tags> <file>... Display files with matching tags
tag -l | --list <file>... List the tags on file
tag -f | --find <tags> Find all files with tags
<tags> is a comma-separated list of tag names; use * to match/find any tag.
additional options:
-v | --version Display version
-h | --help Display this help
-n | --name Turn on filename display in output (default)
-N | --no-name Turn off filename display in output (list)
-t | --tags Turn on tags display in output (find, match)
-T | --no-tags Turn off tags display in output (list)
-g | --garrulous Display tags each on own line (list, find, match)
-G | --no-garrulous Display tags comma-separated after filename (default)
-H | --home Find tagged files only in user home directory
-L | --local Find tagged files only in home + local filesystems (default)
-R | --network Find tagged files in home + local + network filesystems
-0 | --nul Terminate lines with NUL (\0) for use with xargs -0
เป็นไปได้ที่จะจัดการแท็กผ่านคำสั่ง bash บริสุทธิ์ ไม่จำเป็นต้องใช้ "แท็ก" ของบุคคลที่สาม
คำสั่งนี้แสดงรายการแท็กทั้งหมดของไฟล์ ($ src):
xattr -px com.apple.metadata:_kMDItemUserTags "$src" | \
xxd -r -p - - | plutil -convert json -o - - | sed 's/[][]//g' | tr ',' '\n'
และนี่คือวิธีที่คุณสามารถเพิ่มแท็ก ($ newtag) ลงในไฟล์ ($ src):
xattr -wx com.apple.metadata:_kMDItemUserTags \
"$(xattr -px com.apple.metadata:_kMDItemUserTags "$src" | \
xxd -r -p - - | plutil -convert json -o - - | sed 's/[][]//g' | tr ',' '\n' | \
(cat -; echo \"$newtag\") | sort -u | grep . | tr '\n' ',' | sed 's/,$//' | \
sed 's/\(.*\)/[\1]/' | plutil -convert binary1 -o - - | xxd -p - -)" "$src"
นี่คือเชลล์สคริปต์ขนาดเล็กที่ส่งออกฟังก์ชัน "แท็ก" การใช้งาน:
tags <file>
Lists all tags of a file
tags -add <tag> <file>
Adds tag to a file
ฟังก์ชั่นสามารถขยายได้อย่างง่ายดายเพื่อรองรับการลบเช่นกัน
tags() {
# tags system explained: http://arstechnica.com/apple/2013/10/os-x-10-9/9/
local src=$1
local action="get"
if [[ $src == "-add" ]]; then
src=$3
local newtag=$2
local action="add"
fi
# hex -> bin -> json -> lines
local hexToLines="xxd -r -p - - | plutil -convert json -o - - | sed 's/[][]//g' | tr ',' '\n'"
# lines -> json -> bin -> hex
local linesToHex="tr '\n' ',' | echo [\$(sed 's/,$//')] | plutil -convert binary1 -o - - | xxd -p - -"
local gettags="xattr -px com.apple.metadata:_kMDItemUserTags \"$src\" 2> /dev/null | $hexToLines | sed 's/.*Property List error.*//'"
if [[ $action == "get" ]]; then
sh -c "$gettags"
else
local add="(cat -; echo \\\"$newtag\\\") | sort -u"
local write="xattr -wx com.apple.metadata:_kMDItemUserTags \"\$($gettags | $add | grep . | $linesToHex)\" \"$src\""
sh -c "$write"
fi
}
export -f tags
xattr -wx
คำสั่งของคุณล้มเหลวเมื่อไฟล์ไม่มีแท็กใด ๆ ฉันจะหลีกเลี่ยงสิ่งนี้ได้อย่างไร
xattr -px …
คำสั่งที่คุณได้รับจะแสดงแท็กที่หนึ่งในโฟลเดอร์ของฉันจะช่วยให้การส่งออกต่อไปนี้: (ขึ้นบรรทัดใหม่) "language:Objective-C\n2"
หากคุณจะใส่รหัสเชลล์ที่ซับซ้อนในระดับปานกลางลงในฟังก์ชันทุบตีคุณก็แค่ทำซ้ำความพยายามของแท็กซึ่งมีข้อได้เปรียบในการดูแลชุมชนอย่างดี "platform:iOS\n4"