Spotlight 是否会重新导入已复制或移动的文件?

Spotlight 是否会重新导入已复制或移动的文件?

这不是一个关于极端情况或类似情况的陷阱问题——简单地说,如果 Spotlight已将文件导入数据库并编入索引并且该文件被移动或复制(例如,使用脚本动量或者cp在对其进行检查时,Spotlight 是否会比较校验和(或类似的东西)来确定“这是同一个文件,不需要再次查看它”,或者它是否只是再次调用为该类型注册的导入器(这将触发重新解析)。

如果可能的话,请提供你从哪里了解到这一点;问题是,我真的想确定哪一个是指定的行为(使用像 Spotlight 这样的变化无常的系统进行实验太容易被误导了)。

背景是,我有一个自定义的 Spotlight 导入器,它非常耗时(就导入文件所需的时间而言),我想知道编写一个 shell 脚本是否可以安全地将其索引的文件移入/移出启用 Spotlight 的文件夹,而不必担心导致 Spotlight 疯狂地重新索引所有内容。

答案1

要了解 mv/cp 是否发生重新索引,您可以使用以下方式进行监控七人. 它使用与 Spotlight 相同的底层 API 来观察文件系统的变化

答案2

它基本上不需要重新索引,因为任何经过内核的文件 I/O(包括 UNIXmvcp命令)都会导致 Spotlight 索引更新。这样,索引就始终是最新的。

自那时以来,Spotlight 确实取得了长足的进步,但当 10.4 Tiger 发布时,有一些关于其工作原理的好文章在流传,解释了这项技术。其中一篇这样的文章位于综合Ars Technica Tiger 评论。 引用:

预先创建的索引允许非常快速的搜索,但它们也预设了一个潜在的问题。索引很容易与文件系统的当前状态不同步,而过时的索引用处不大。为了提供准确的结果,索引必须“实时”准确地反映所有文件的状态。

每个元数据导入器负责扫描文件并返回它可以提取的所有元数据 - 从文件系统元数据结构、文件内容或它要考虑的任何其他内容。元数据以一组键/值对的形式返回,并添加到文件的 Spotlight 索引条目中。

元数据导入器插件存储在各种库文件夹中的 Spotlight 文件夹中。通常,更具体的位置优先:~/Library/Spotlight覆盖/Library/Spotlight,等等。

任何经过 Tiger 内核的文件 i/o 都会触发相应的元数据导入器。这种内核级集成可确保 Spotlight 索引始终保持最新状态。

希望这能有所帮助。其他人也许能够阐明自 Tiger 发布以来 Spotlight 架构的改进。我只是一个谦虚的用户。

相关内容