不同驱动器上同一文件的不同 Spotlight kMDItemKind 元数据值

不同驱动器上同一文件的不同 Spotlight kMDItemKind 元数据值

我遇到过一个问题,我发现同一个视频文件的kMDItemkindSpotlight 元数据值会根据其所在的驱动器(当然是同一台机器)而有所不同,这导致 Spotlight 搜索“Kind”文件失败。更糟糕的是,外部驱动器上的值在某些情况下不正确,并且与其来源应用程序提供的文档类型层次结构不一致。

  • 在内部驱动器上
    1. 对于 Matroska 视频文件(mkv文件扩展名),mdls列出kMDItemKind为“视频媒体”。这是正确的,因为它是此文件类型的默认播放器(播放器)“一刀切”视频类型。
    2. m4v对于来自 iTunes Store (扩展名)的 QuickTime MPEG4 文件,mdls列表kMDItemKind为“Apple MPEG-4-Film”。同样,这是正确的,因为它是此文件类型 (QuickTimeX) 匹配视频媒体类型的默认播放器。
  • 在我的外部 FireWire 驱动器上
    1. 对于相同的 Matroska 文件,mdls列表kMDItemKind为“Movie-DivX”。这显然是错误的,但即使对于影视,它提供了这个值,因为 iFlicks 的文档类型层次结构不绑定mkv到这种类型 - 它将其绑定到“Video-Matroska”。
    2. 对于相同的 MPEG4 文件,mdls列出kMDItemKind为“Video-MPEG4”。从技术上讲,这是正确的,但同样,这是 iFlicks 提供的值,它既不是此文件类型的默认播放器,也不是 Finder 中指定的播放器。
  • 在两个驱动器上时,Finder“获取信息”窗口显示正确的文件类型(即“视频媒体”/“Apple MPEG-4-Film”),但与值一致kMDItemKind,Spotlight 对这种类型的搜索仅返回内部驱动器的结果。

mdls对各个文件上的输出进行比较表明,除了这个差异之外,其他不同的键只有kMDItemFSOwnerGroupIDkMDItemFSOwnerGroupID,在外部驱动器上设置为 99(_unknown),在内部驱动器上设置为我的用户和组 ID(请注意,尽管这表明了什么,但实际文件所有权和权限是相同的)。

两个驱动器均格式化为Mac OS 扩展日志,但当我将相关文件复制到 FAT32 格式的 USB 密钥上时,问题仍然相同。在驱动器上复制、复制或移动文件不会改变此现象,只有从内部传输到外部时才会改变。反之亦然做。

最后,重新索引外部驱动器(sudo mdutil -E "/Volumes/My Book"首先使用,然后使用困难的方法,先关闭索引,删除.Spotlight-V100,执行上述操作并重新启用索引)没有什么区别。元数据的时间戳会发生变化,但值保持不变。

如何让 SpotlightkMDItemKind在外部驱动器上存储我的视频文件的正确值(由相应的默认播放器定义)?

运行 OS X 10.7.4(问题已在 10.7.3 中出现),德语。其他已安装的媒体应用程序(除 MPlayerX 和 iFlicks 外):Subler、MediaInfo、Perian

答案1

事实证明,kMDItemFSOwner*ID设置为的键_unknown指向了正确的方向:Lion 当前的 Spotlight 实现显然将设置kMDItemKind为值,而这些值仅与所有者和/或组为99(又名_unknown)的文件和文件夹上的正确值间接相关。 问题在于,默认情况下,外部磁盘设置为忽略其内容的所有权,或者,从技术术语上讲,它们的状态数据库设置为停用(“放弃”)磁盘所有权。

在这种情况下,所有卷内容的所有权和组所有权都设置为_unknown99),但是,这使得问题难以识别,Finder 和 shell 都将显示当前的用户组和用户 ID,而不是这些值(sudo ls -lna将显示正确的值 - 感谢 @kpatten此 Apple 支持社区主题)。

解决方案

  1. 激活(“采用”)卷的磁盘所有权。这可以通过 Finder 中卷的“获取信息”对话框(取消勾选最底部的复选框)或通过 shell 完成:

    sudo vsdbutil -a /Volumes/<Volume name>
    
  2. 取得所有受影响文件和文件夹的所有权。我建议不要管卷根目录(毕竟,Apple 的预设是有道理的 – 您不希望可移动驱动器与它所连接的 Mac 的所有权结构绑定在一起,至少不要太深),并在包含受影响内容的顶级文件夹级别执行此操作:

    sudo chown -R $(id -u "$USER"):$(id -g "$USER") /Volumes/<Volume name>/<Folder>
    
  3. 重新索引卷

    sudo mdutil -E /Volumes/<Volume name>
    

按照这些步骤进行检查mdls将显示正确设置的kMDItemFSOwner*ID键(这并不奇怪)以及 - 更重要的是 -kMDItemKind文件的正确值。

买家自慎:这是解决问题的黑客手段,而不是解决方案(必须由 Apple 提供)。首先,它破坏了外部驱动器的“可移动性”,因为它设置了只有在连接到特定 Mac 时才有效的权限,这些权限适用于在重置层次结构中创建/复制的所有文件和文件夹。其次,它仅适用于具有可以设置 POSIX 所有权的文件系统的卷 - 其他卷(例如,FAT32 格式的卷)上的 Spotlight 数据无法通过这种方式修复。

错误已报告给 Apple。镜像为打开雷达 #1725402

参考

相关内容