可以使用Mac OS X Finder中的颜色标记文件和文件夹。 有没有办法从shell脚本中执行此操作?
答案 0 :(得分:8)
此shell脚本将文件或文件夹名称作为其第一个参数,标签索引(0表示无标签,1表示红色,...,7表示灰色)作为其第二个参数。
#!/bin/sh
osascript -e "tell application \"Finder\" to set label index of alias POSIX file \"`cd -P -- "$(dirname -- "$1")" && printf '%s\n' "$(pwd -P)/$(basename -- "$1")"`\" to $2"
更直接地说,如果$ filename是一个shell变量,其中包含要标记的文件或文件夹的绝对路径名,$ label是一个带有标签索引号的shell变量,
osascript -e "tell application \"Finder\" to set label index of alias POSIX file \"$filename\" to $label"
是一个shell命令,用于将标签分配给文件或文件夹。
答案 1 :(得分:8)
这是我写的一个快速python脚本:
https://github.com/danthedeckie/finder_colors
用于设置命令行中文件夹和文件的颜色。
用法:
finder_colors.py red /Users/daniel/src
将/ Users / daniel / src目录设置为红色。
finder_colors.py /Users/daniel/src
返回颜色(在本例中为'red')。如果您正在编写python脚本,则可以将finder_colors作为模块导入,并直接使用它(finder_colors.get(...)和finder_colors.set(...)。
答案 2 :(得分:4)
根据此处和参考帖子中的回复,我制作了以下函数并将其添加到我的~/.bash_profile
文件中:
# Set Finder label color
label(){
if [ $# -lt 2 ]; then
echo "USAGE: label [0-7] file1 [file2] ..."
echo "Sets the Finder label (color) for files"
echo "Default colors:"
echo " 0 No color"
echo " 1 Orange"
echo " 2 Red"
echo " 3 Yellow"
echo " 4 Blue"
echo " 5 Purple"
echo " 6 Green"
echo " 7 Gray"
else
osascript - "$@" << EOF
on run argv
set labelIndex to (item 1 of argv as number)
repeat with i from 2 to (count of argv)
tell application "Finder"
set theFile to POSIX file (item i of argv) as alias
set label index of theFile to labelIndex
end tell
end repeat
end run
EOF
fi
}
答案 3 :(得分:2)
这样做的一个丑陋方法是:
exec osascript <<\EOF
tell app "Finder"
-- [...]
-- selecting the file
-- [...]
-- 4 is Blue
set label index of thisItem to 4
end tell
基本上启动一个使用finder设置颜色的AppleScript。
我得到了以下提示:
(颜色)http://www.macosxhints.com/article.php?story=20070602122413306
(Shell)http://www.macosxhints.com/article.php?story=20040617170055379
答案 4 :(得分:1)
osxutils包中还有命令行工具'setlabel'。它不需要AppleScript或Finder正在运行。
答案 5 :(得分:1)
这将使用与Finder相同的颜色顺序。
#!/bin/bash
if [[ $# -le 1 || ! "$1" =~ ^[0-7]$ ]]; then
echo "Usage: label 01234567 file ..." 1>&2
exit 1
fi
colors=( 0 2 1 3 6 4 5 7 )
n=${colors[$1]}
shift
osascript - "$@" <<END > /dev/null 2>&1
on run arguments
tell application "Finder"
repeat with f in arguments
set f to (posix file (contents of f) as alias)
set label index of f to $n
end repeat
end tell
end
END
我正在重定向STDERR,因为我在10.8上收到了2012-09-06 13:50:00.965 osascript[45254:707] CFURLGetFSRef was passed this URL which has no scheme (the URL may not work with other CFURL routines): test.txt
之类的警告。 STDOUT被重定向,因为osascript打印了最后一个表达式的值。