Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 如何让mdfind在文件之外包含文件夹匹配项?_Macos_Bash_Terminal - Fatal编程技术网

Macos 如何让mdfind在文件之外包含文件夹匹配项?

Macos 如何让mdfind在文件之外包含文件夹匹配项?,macos,bash,terminal,Macos,Bash,Terminal,在终端中,我使用mdfind'kMDItemFSLabel=6'查找Mac上带有红色文件标签的所有内容。但是,它似乎排除了带有红色标签的文件夹。我试图让它也返回文件夹,但我甚至无法让这些文件夹查询工作,更不用说将其添加到当前文件结果mdfind kind:folders和mdfind'kMDItemFSLabel=6'独立工作,但我不知道如何同时获得这两个文件夹: mdfind kind:folders AND 'kMDItemFSLabel == 6' mdfind 'kind:folders

在终端中,我使用
mdfind'kMDItemFSLabel=6'
查找Mac上带有红色文件标签的所有内容。但是,它似乎排除了带有红色标签的文件夹。我试图让它也返回文件夹,但我甚至无法让这些文件夹查询工作,更不用说将其添加到当前文件结果
mdfind kind:folders
mdfind'kMDItemFSLabel=6'
独立工作,但我不知道如何同时获得这两个文件夹:

mdfind kind:folders AND 'kMDItemFSLabel == 6'
mdfind 'kind:folders' AND 'kMDItemFSLabel == 6'
mdfind 'kind:folders kMDItemFSLabel == 6'
mdfind kind:folders kMDItemFSLabel == 6
etc
我得到的结果是
未能为[query over]

正确的语法是什么

一旦我做到了,我怎么说“文件夹和所有文件”?类似“种类:文件夹+全部”的东西

编辑:也尝试了:

mdfind kind:folders && 'kMDItemFSLabel == 6'   returns every folder on my computer
mdfind kind:folders && kMDItemFSLabel == 6   returns every folder on my computer
mdfind 'kind:folders' && 'kMDItemFSLabel == 6' returns every folder on my computer
mdfind 'kind:folders && kMDItemFSLabel == 6'   failed to create query

以下似乎有效:

mdfind 'kMDItemContentType = "public.folder" && kMDItemUserTags = "Red"cd'

顺便说一句,
末尾的
cd
“红色”
意味着比赛应该忽略大小写(大写和小写)和变音标记(重音等)。

tl;dr

使用以下独立于区域设置的命令:

  • 文件和文件夹:
    • mdfind'kMDItemUserTags==Red'
  • 仅限文件:
    • mdfind'kMDItemUserTags==红色&&!kMDItemContentType==公用文件夹“
  • 仅文件夹:
    • mdfind'kMDItemUserTags==Red&&kMDItemContentType==public.folder'
更简单,但特定于语言环境的等价物-这些仅适用于英语语言环境,必须本地化才能与其他语言环境一起使用

  • 文件和文件夹:
    • mdfind“标签:红色”
  • 仅限文件:
    • mdfind“标签:红色而非种类:文件夹”
  • 仅文件夹:
    • mdfind'tag:red AND kind:folder'
有关背景信息,请继续阅读


更新:事实证明,聚光灯-因此
mdfind
-使用两种不同的语言

  • SL-简单语言:一种基于
    
    
      • 警告:
        c
        d
        选项解释为需要作为
        [c]
        [d]
        附加到运算符,而不是(右侧)操作数,这是OSX在保存交互式构造的查询时所做的操作;另外,至少还有一些选项出口没有提到:
        w
        ;如果在带引号的字符串中附加一个或多个选项字母,其含义如下
      • c
        。。。不敏感地匹配案例
      • d
        。。。匹配时忽略变音符号(外来字符基字母上方和下方的标记)
      • w
        。。。匹配作为一个完整的词(从我能告诉)
      • 您还可以使用熟悉的
        *
        (任意字符序列)和
        (一个字符)通配符
      • 注意,由于Spotlight可以通过插件进行扩展,任何给定的机器都可能具有附加属性;要查看文件类型到属性的映射,请运行
        mdimport-X
        并查看
        Types
        键的条目


总而言之,从OSX 10.10.3开始,
mdfind
和Spotlight查询语言都没有很好的文档记录,挑剔的野兽
——试错往往是你最好的朋友,很遗憾。

如果你在一个你希望匹配的文件夹上使用
mdls
,它会显示标签吗?Spotlight GUI会找到文件夹吗?如果是,请尝试保存搜索,然后在“获取信息”窗口中检查查询或在文本编辑器中检查文件XML。所有出现在引号之外的
&&
命令都不是您所想的。shell对
&&
的解释就好像您输入了两个单独的命令,第二个命令只有在第一个命令成功时才执行。我怀疑这就是原因。通常,前导下划线表示“苹果专用”。请注意,
…FinderLabel
…FSLabel
不同。我做了一个测试,当我搜索一个标签(现在称为“标签”)并保存它时,查询是
kMDItemUserTags=“Purple”cd
mdls
kMDItemUserTags
列为一个数组,这很有意义,因为您可以对项目应用多个标记。所以,我想你应该搜索它。啊,你是对的,我没有注意到它是一个不同的属性名。看起来kMDItemFinderLabel和kMDItemUserTags都给出了相同的结果,但kMDItemUserTags可能是更好的选择,因为苹果已经转向标签而不是标签。就我所知,如果我想将其限制为文件夹(或仅限于文件),那么将其与“种类:文件夹”结合起来的正确方法是什么?我仍然无法使上述组合起作用。谢谢
mdfind 'kMDItemUserTags == Red'
mdfind 'tag:red' # in German, `tag:red` would be `attribut:red`
mdfind 'kMDItemUserTags == Red && ! kMDItemContentType == public.folder'
mdfind 'tag:red AND NOT kind:folder' # in German, `kind:folder` would be `art:ordner`
mdfind 'kMDItemUserTags == Red && kMDItemContentType == public.folder'
mdfind 'tag:red AND kind:folder'