是否可以将Mac OS X的Spotlight配置为忽略某些文件类型?

时间:2020-03-05 18:46:55  来源:igfitidea点击:

我有很多由代码和LaTeX文档生成的辅助文件,我非常希望SpotLight不建议它们作为潜在的搜索候选对象。我不是在寻找example.log,我是在寻找example.tex

那么可以将Spotlight配置为忽略所有.log文件吗?

(我知道,我知道;我应该只使用QuickSilver)

@diciu这是一个有趣的答案。我的问题是这样的:

Figure out which importer handles your type of file

我不确定我的文件类型是否由任何单个进口商处理?由于它们都有怪异的扩展名(.aux,.glo,.out等),所以我认为不可能有一个进口商试图为其编制索引。但是因为它们是纯文本,所以它们被当作通用文件使用。 (不可否认,我对Spotlight的索引了解不多,所以我对此可能完全错了。)

再次@diciu:TextImporterDontImportList听起来很有希望;我将出发,看看是否有任何结果。

就像我们说的那样,似乎整个UTI系统实际上都不允许不搜索某些内容。

@Raynet使文件不可见实际上是一个好主意,尽管从一般意义上来说,设置起来比较麻烦。如果最坏的情况变得更糟,我可能会尝试一下(但可能在用尽其他选项(例如QuickSilver)之后)。 (哦,SetFile需要开发人员工具,但是我想这里的每个人都已经安装了它们:))

解决方案

回答

不确定如何在文件类型级别执行此操作,但是可以在文件夹级别执行此操作:

资料来源:http://lists.apple.com/archives/spotlight-dev/2008/Jul/msg00007.html

使Spotlight忽略文件夹

如果由于其他软件的依赖而绝对不能重命名该文件夹,另一种方法是继续将目录重命名为以" .noindex"结尾,然后在原始位置的同一位置创建一个指向实际位置的符号链接姓名。

大多数软件都乐于将符号链接与原始名称一起使用,但是Spotlight会忽略符号链接,并会注意到"真实"名称以* .noindex结尾,并且会忽略该位置。

也许像这样:

mv OriginalName OriginalName.noindex
  ln -s OriginalName.noindex

  OriginalName
  
  ls -l
  
  lrwxr-xr-x 1 andy admin 24 Jan 9 2008
  OriginalName -> OriginalName.noindex
  drwxr-xr-x 11 andy admin 374 Jul 11
  07:03 Original.noindex

回答

这是可能的工作方式。

注意:这不是一个很好的解决方案,因为系统更新将覆盖我们将执行的更改。

获取所有进口商的列表

cristi:~ diciu$ mdimport -L
2008-09-03 10:42:27.144 mdimport[727:10b] Paths: id(501) (
    "/System/Library/Spotlight/Audio.mdimporter",
    "/System/Library/Spotlight/Chat.mdimporter",
    "/Developer/Applications/Xcode.app/Contents/Library/Spotlight/SourceCode.mdimporter",

找出哪个导入程序可以处理文件类型(音频导入程序的示例):

cristi:~ diciu$ cat /System/Library/Spotlight/Audio.mdimporter/Contents/Info.plist 

[..]
            CFBundleTypeRole
            MDImporter
            LSItemContentTypes
            
                public.mp3
                public.aifc-audio
                public.aiff-audio

更改导入者的plist,以删除要忽略的类型。

重新导入导入者的类型,以便系统提取更改:

mdimport -r /System/Library/Spotlight/Chat.mdimporter

回答

@将这些定义类型的东西称为统一类型标识符。

问题在于它们是扩展名(例如.txt)和通用类型的组合(即public.plain-text匹配的是不完全基于内容的txt扩展名的txt文件),因此它并不像查找扩展名那么简单。

RichText.mdimporter可能是导入文本文件的导入器。
应该通过在不需要索引的文件之一上以调试模式运行mdimport来轻松验证这一点:

cristi:~ diciu$ echo "All work and no play makes Hyman a dull boy" > ~/input.txt
cristi:~ diciu$ mdimport -d 4 -n ~/input.txt 2>&1 | grep Imported
    kMD2008-09-03 12:05:06.342 mdimport[1230:10b] Imported '/Users/diciu/input.txt' of type 'public.plain-text' with plugIn /System/Library/Spotlight/RichText.mdimporter.

在我的示例中匹配的类型是public.plain-text。

我不知道我们实际上如何为UTI编写基于扩展的异常(如public.plain-text,但以.log结尾的任何内容除外)。

后来的编辑:我也查看了RichText mdimporter二进制文件,发现了一个有前途的字符串,但是我不知道它是否被实际使用(作为首选项名称或者其他名称):

cristi:FoodBrowser diciu$ strings /System/Library/Spotlight/RichText.mdimporter/Contents/MacOS/RichText |grep Text

TextImporterDontImportList

回答

唯一的选择可能是使它们不被聚光灯索引,因为某些原因我们不能进行否定搜索。我们可以搜索带有特定文件扩展名的文件,但不能不搜索不匹配的文件。

我们可以尝试使这些文件对于Finder不可见,Spotlight不会为不可见文件编制索引。在文件上设置kIsInvisible标志的命令是:

SetFile -a v [文件名]