我遇到过一个问题,我发现同一个视频文件的kMDItemkind
Spotlight 元数据值会根据其所在的驱动器(当然是同一台机器)而有所不同,这导致 Spotlight 搜索“Kind”文件失败。更糟糕的是,外部驱动器上的值在某些情况下不正确,并且与其来源应用程序提供的文档类型层次结构不一致。
- 在内部驱动器上,
- 对于 Matroska 视频文件(
mkv
文件扩展名),mdls
列出kMDItemKind
为“视频媒体”。这是正确的,因为它是此文件类型的默认播放器(播放器)“一刀切”视频类型。 m4v
对于来自 iTunes Store (扩展名)的 QuickTime MPEG4 文件,mdls
列表kMDItemKind
为“Apple MPEG-4-Film”。同样,这是正确的,因为它是此文件类型 (QuickTimeX) 匹配视频媒体类型的默认播放器。
- 对于 Matroska 视频文件(
- 在我的外部 FireWire 驱动器上,
- 对于相同的 Matroska 文件,
mdls
列表kMDItemKind
为“Movie-DivX”。这显然是错误的,但即使对于影视,它提供了这个值,因为 iFlicks 的文档类型层次结构不绑定mkv
到这种类型 - 它将其绑定到“Video-Matroska”。 - 对于相同的 MPEG4 文件,
mdls
列出kMDItemKind
为“Video-MPEG4”。从技术上讲,这是正确的,但同样,这是 iFlicks 提供的值,它既不是此文件类型的默认播放器,也不是 Finder 中指定的播放器。
- 对于相同的 Matroska 文件,
- 在两个驱动器上时,Finder“获取信息”窗口显示正确的文件类型(即“视频媒体”/“Apple MPEG-4-Film”),但与值一致
kMDItemKind
,Spotlight 对这种类型的搜索仅返回内部驱动器的结果。
mdls
对各个文件上的输出进行比较表明,除了这个差异之外,其他不同的键只有kMDItemFSOwnerGroupID
和kMDItemFSOwnerGroupID
,在外部驱动器上设置为 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
)的文件和文件夹上的正确值间接相关。 问题在于,默认情况下,外部磁盘设置为忽略其内容的所有权,或者,从技术术语上讲,它们的状态数据库设置为停用(“放弃”)磁盘所有权。
在这种情况下,所有卷内容的所有权和组所有权都设置为_unknown
(99
),但是,这使得问题难以识别,Finder 和 shell 都将显示当前的用户组和用户 ID,而不是这些值(sudo ls -lna
将显示正确的值 - 感谢 @kpatten此 Apple 支持社区主题)。
解决方案
激活(“采用”)卷的磁盘所有权。这可以通过 Finder 中卷的“获取信息”对话框(取消勾选最底部的复选框)或通过 shell 完成:
sudo vsdbutil -a /Volumes/<Volume name>
取得所有受影响文件和文件夹的所有权。我建议不要管卷根目录(毕竟,Apple 的预设是有道理的 – 您不希望可移动驱动器与它所连接的 Mac 的所有权结构绑定在一起,至少不要太深),并在包含受影响内容的顶级文件夹级别执行此操作:
sudo chown -R $(id -u "$USER"):$(id -g "$USER") /Volumes/<Volume name>/<Folder>
重新索引卷
sudo mdutil -E /Volumes/<Volume name>
按照这些步骤进行检查mdls
将显示正确设置的kMDItemFSOwner*ID
键(这并不奇怪)以及 - 更重要的是 -kMDItemKind
文件的正确值。
买家自慎:这是解决问题的黑客手段,而不是解决方案(必须由 Apple 提供)。首先,它破坏了外部驱动器的“可移动性”,因为它设置了只有在连接到特定 Mac 时才有效的权限,这些权限适用于在重置层次结构中创建/复制的所有文件和文件夹。其次,它仅适用于具有可以设置 POSIX 所有权的文件系统的卷 - 其他卷(例如,FAT32 格式的卷)上的 Spotlight 数据无法通过这种方式修复。
错误已报告给 Apple。镜像为打开雷达 #1725402。
参考