在OS X Finder中使用Shell脚本为文件打上颜色标签

11

在Mac OS X Finder中,可以给文件和文件夹打上颜色标签。 是否有一种方法可以通过shell脚本实现这一点?


请参阅https://superuser.com/questions/168927/mac-os-x-how-to-change-the-color-label-of-files-from-the-terminal - undefined
6个回答

11

这个 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 命令。


如果文件名包含双引号或以反斜杠结尾,则此操作将失败。 - Kevin Reid
@Kevin:有什么解决方案吗? - Svish
@Kevin:另外...为什么你会有一个包含双引号的文件名?我以为那是无效的...或者只是在Windows中... - Svish
2
文件名中不允许出现的唯一字符是NUL(U+0000)和路径分隔符(在哪个API上取决于"/"或":")。将字符串安全地传递给AppleScript的方法是使用命令行参数来给osascript(即,osascript -e <script> <arg>),然后在脚本内部使用on run theArguments ... end run处理程序来检索它们。 - Kevin Reid
标签的顺序与Finder中不同。1应该是橙色的。 - Lri

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(...))。


1
如果您能通过相关的代码示例来解释您的解决方案,那将更有帮助。 - Pfitz
1
感谢@Pfitz - 我已经添加了使用信息。它的内部工作方式是使用内置的Python库来编辑文件的扩展属性。我找不到一个优雅的本地shell脚本方式来做这件事,也不喜欢苹果脚本解决方案。 - Daniel
不好意思,你的代码在扫描像 "/Desktop/image.jpeg" 这样的文件时无法工作。你有什么想法来修复它吗?提前谢谢。 - Joe

5

根据这里和相关帖子的回复,我制作了以下函数并将其添加到了我的~/.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
}

2

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

我正在重定向标准错误流,因为我收到了警告信息,如“2012年9月6日13:50:00.965 osascript [45254:707] CFURLGetFSRef被传递了这个没有方案的URL(该URL可能无法与其他CFURL例程一起使用):test.txt”在10.8上。标准输出流被重定向,因为osascript打印最后一个表达式的值。

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接