我想使用 Finder 在 Mac 上的某些文件添加特定颜色标签,然后能够使用 Python 或 bash 脚本获取该文件列表。是否可以通过命令行或Python脚本获取与文件关联的标签列表?
这是可能的。
但是你必须依赖 xattr,xattr-lib 应该可以解决问题。
已经给出了一些关于如何使用
xattr
命令行工具的示例,可以在这里找到:
希望这些对你有帮助。
在更糟糕的情况下,您可以使用名为 tag 的工具:
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)
这与subprocess.Popen结合可以解决您的需求。
迟到了,但这也是一直困扰我的事情 - 我最终为技术害羞的人想出了一个运行回合,不需要行命令编码,只需要普通的 Finder 命令和 SimpleText。尝试以下操作:
打开包含标记文件的 Finder 窗口并选择全部
右键单击所选文件以获取上下文菜单,然后选择“复制 [x 个] 文件”。如果它没有说“复制 [x 个] 文件”而只是“复制 [文件名]”,则您不小心取消选择了这些文件;重新选择所有文件,然后再次尝试右键单击。
打开简单文本。确保将其设置为使用纯文本而不是富文本。 (菜单栏:格式>制作纯文本/富文本)。如果将其设置为富文本,则此技术将不起作用:您将获得包含实际文件的文档,而不是其名称列表!
粘贴。这将粘贴所有选定文件的“文件名”列表,每行一个,按照它们在 Finder 中出现的顺序排列。万岁!
来查找感兴趣的文件:
% mdfind 'kMDItemUserTags == "red"c' -onlyin ~/Desktop/td
/Users/andrew/Desktop/td/file2
/Users/andrew/Desktop/td/file5
% mdfind 'kMDItemUserTags == "orange"c' -onlyin ~/Desktop/td
/Users/andrew/Desktop/td/file4
/Users/andrew/Desktop/td/file5
(字符串
c
之后的
"orange"
设置忽略大小写选项。否则您需要 'kMDItemUserTags == "Orange"'
)您可以在 shell 循环中使用它,并且支持通配符:
while read -r fn; do
echo "$fn" $(mdls -name kMDItemUserTags "$fn")
done < <(mdfind 'kMDItemUserTags == "*"' -onlyin ~/Desktop/td)
这使用mdls
/Users/andrew/Desktop/td/file5 kMDItemUserTags = ( Red, Orange )
/Users/andrew/Desktop/td/file4 kMDItemUserTags = ( Orange )
/Users/andrew/Desktop/td/file2 kMDItemUserTags = ( Red )
因此任何支持系统调用的脚本语言也将允许获取 Finder 标签。
特别是使用 Python,您甚至有
更好的选择。