9

可以在 Mac OS X Finder 中用颜色标记文件和文件夹。有没有办法从 shell 脚本中做到这一点?

4

6 回答 6

9

此 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 命令,用于将标签分配给文件或文件夹。

于 2010-03-12T21:02:58.157 回答
8

这是我写的一个快速的python脚本:

https://github.com/danthedeckie/finder_colors

它从命令行设置文件夹和文件的颜色。

用法:

finder_colors.py red /Users/daniel/src

将 /Users/daniel/src 目录设置为红色。

finder_colors.py /Users/daniel/src

返回颜色(在这种情况下,现在是“红色”)。如果您正在编写 python 脚本,您可以将 finder_colors 作为模块导入,并直接使用它(finder_colors.get(...) 和 finder_colors.set(...)。

于 2012-10-09T14:52:59.560 回答
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
}
于 2011-03-09T20:57:44.123 回答
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

(壳)http://www.macosxhints.com/article.php?story=20040617170055379

于 2010-03-12T20:41:50.937 回答
1

osxutils包中还有命令行工具“setlabel” 。它不需要 AppleScript 或 Finder 正在运行。

于 2012-03-11T23:44:07.403 回答
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,因为我收到了类似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.txt10.8 的警告。STDOUT 被重定向,因为 osascript 打印最后一个表达式的值。

于 2012-09-16T00:24:13.237 回答