OSX Mavericks标签在命令行中可见吗?


13

例如,假设我有一个目录结构,例如

/Users
    /tlehman
        /Math
            algebraic_varieties.tex [tagged: Math, Documentation]
            projective_geometry.pdf [tagged: Math]
        /Development
            visualize_surfaces.py   [tagged: Math, Programming]
            solve_polynomials.scm   [tagged: Math]
    /guest
        /Desktop
            welcome.rtf             [tagged: Documentation]
/Volumes
    /USBKey
        assignments_for_may.txt     [tagged: Math]
        using_LaTeX.pdf             [tagged: Documentation]

从命令行,是否可以使用ls(或类似方式)显示所有标记为“ Math”的文件?

编辑:我做了一个工具tfind,可以做到这一点:https : //github.com/tlehman/bin/blob/master/tfind



1
tag赞同James Berry在的建议https://github.com/jdberry。您可以通过安装,通过brew install tag添加标签,通过tag -a <tag> <file>查找标签tag -f <tag1, tag2>。非常非常方便,我一直都在使用它。
克里斯·康诺夫

是的,绝对可以得到tag命令。通过brew安装非常容易。
雅各布

Answers:


11

我假设他们将是 xattr,就像它们当前在10.8.3(或更旧)上一样

当前,您可以查看文件具有的扩展属性 ls -l@

但是要查看属性的内容,必须使用xattr


没错,标签存储为xattr
tlehman 2013年

仅供参考:在OS X El Capitan中,我使用了命令xattr -pl com.apple.metadata:_kMDItemUserTags filename。但是,它的输出不是很友好。
LS

13

是的,您可以使用找到具有给定用户标签的文件mdfind

创建一个文件,并在Finder中为其分配一个自定义标签。

然后进入航站楼;您会发现它与:

mdfind "kMDItemUserTags == Math || kMDItemUserTags == Programming"

要么

mdfind "kMDItemUserTags == Math && kMDItemUserTags == Programming"

也可以看看 -onlyin aFolder以限制搜索。

我没有检查这些布尔表达式可以有多复杂,但是这两个示例可以工作。

您可以通过管道将输出ls如下所示:

mdfind "kMDItemUserTags == mathTag || kMDItemUserTags == anotherTag" \
| while read f; do ls "$f"; md5 "$f"; done

此外,mdfind具有选项“ -0”

    -0                Use NUL (``\0'') as a path separator, for use with xargs -0.

使用讨厌的文件名可能很实用。


此方法的问题在于,它找不到所有文件,仅返回文件(可能为空)的子集。
markvgti

3
看来他们已经推出了简化mdfind的标记,如语法:mdfind "tag:Math"mdfind "tag:Math OR tag:Programming"
wjv

1
@AntoineLecaille我的目录中有295个文件,带有“ Orange”标签(升级到Mavericks之前的Orange Label)。该命令仅列出其中的11个。也有许多标记为“绿色”的文件---该命令找不到任何文件。
markvgti

1
@wjv我使用了您建议的语法,并得到了与上面列出的结果完全相同的结果。
markvgti

1
@markvgti然后获取通过此命令找到的一个Orange文件,再获取一个没有的橙色文件,并使用xattr或mdls查找差异?
alecail

4

您可以通过以下方式获取文件的所有标签:

mdls -name kMDItemUserTags filename


这似乎与所要求的相反。您的命令将所有标签转储为一个文件。我认为OP希望知道带有一个标签的所有文件。
bmike

2
仍然有用。它回答了我在Google搜索并结束搜索时遇到的问题。如果没有其他Q / A涵盖此问题,则值得您自己发表和回答。
Slipp D. Thompson
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.