OSX:为内容类型分配扩展名

Arn*_*old 14 finder file-association macos

在这里,我有一个文件夹,其中包含一堆 *.mkv 文件(显然是视频)和 *.srt 文件(显然是字幕)。我想将它们保存在一个文件夹中,但我不希望它们混合在一起。从视觉上将它们分成两个独立的组看起来是个好主意。

但是,系统无法识别这两个扩展名,它们仍然放在一组“文档”下,这显然不是我想要的。

问题:如何告诉系统所有 *.mkv 文件都应该被视为“媒体”(或“视频”,或任何视频文件的文件类型组的名称)?

谢谢。在此处输入图片说明

编辑:

@Daniel,关联的程序是 MPlayerX,该命令的输出如下:

imac:Game of Thrones arnold$ mdls "Game of Thrones 1×2.mkv"
kMDItemContentCreationDate     = 2011-12-15 10:31:20 +0000
kMDItemContentModificationDate = 2011-12-27 09:09:55 +0000
kMDItemContentType             = "dyn.ah62d4rv4ge804450"
kMDItemContentTypeTree         = (
    "public.data",
    "public.item"
)
kMDItemDateAdded               = 2011-12-27 09:22:55 +0000
kMDItemDisplayName             = "Game Of Thrones 1×2.mkv"
kMDItemFSContentChangeDate     = 2011-12-27 09:09:55 +0000
kMDItemFSCreationDate          = 2011-12-15 10:31:20 +0000
kMDItemFSCreatorCode           = ""
kMDItemFSFinderFlags           = 0
kMDItemFSHasCustomIcon         = 0
kMDItemFSInvisible             = 0
kMDItemFSIsExtensionHidden     = 0
kMDItemFSIsStationery          = 0
kMDItemFSLabel                 = 0
kMDItemFSName                  = "Game of Thrones 1×2.mkv"
kMDItemFSNodeCount             = 220877659
kMDItemFSOwnerGroupID          = 99
kMDItemFSOwnerUserID           = 99
kMDItemFSSize                  = 220877659
kMDItemFSTypeCode              = ""
kMDItemKind                    = "Video Media"
kMDItemLogicalSize             = 220877659
kMDItemPhysicalSize            = 220880896
imac:Game of Thrones arnold$ 
Run Code Online (Sandbox Code Playgroud)

奇怪的是,“项目种类”确实显示为“视频媒体”。而对于字幕文件是“字幕”。尽管如此,由于某种原因,它并不能帮助 Finder 正确排列这些文件......

Dan*_*eck 12

您需要使用一个应用程序来声明正确的文件类型关联,例如.mkv文件扩展名。

例如,系统定义的文件类型在导出类型 UTI部分/System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plist声明以下内容:

在此处输入图片说明 在此处输入图片说明

这允许系统将UTI public.jpeg与“UTI 组”相关联public.image,这(很可能)是 Finder 用于图像组的内容;在public.filename-extensions 同等类型映射到文件扩展名。

这允许 OS X 确定该.jpg文件具有 UTI public.jpeg,并且它是public.image(依此类推,带有public.itempublic.data)的子 UTI 。Finder 然后获取(也)所有文件public.image并将它们放在同一个图像组中。

这同样适用于public.mpeg-4public.movie和那里的文件名映射。


不幸的是,MPlayerX 的作者并没有费心映射 UTI。

他甚至没有费心为程序支持的所有扩展名创建正确的文件类型。这就是为什么在 Finder 的列表视图中,所有.mkv文件都没有被称为,例如Matroska Video,并且在它们的图标上有一个匹配的MKV标签,而只是带有通用视频标签的Video Media。所有支持的文件类型都按此“文件格式”的文件扩展名列出,因此 MPlayerX 可以打开它们:

在此处输入图片说明

这意味着,例如,如果您更喜欢.m4a在 MPlayerX 中播放文件而不是iTunes,您将丢失Finder 的种类列中的描述性Apple MPEG-4 音频,而是获得音频媒体


您可以通过编辑/Applications/MPlayerX.app/Contents/Info.plist文件并正确声明例如mplayerx.video符合public.movie并添加正确文件扩展名映射的UTI来修复分组。

您可以通过编辑相同的文件来修复Kind列,并使用更好的描述正确声明文件类型,并为每个文件创建一个图标文件。

只需使用Core Types Info.plist文件作为模板,例如替换public.jpeg为您自己的自定义标识符(例如,mplayerx.video如果您不想要正确的Kind列和图标,或者mplayerx.mkv如果您想要它们)。您需要 Xcode 来编辑这些文件,或者使用plutil -convert xml1 <filename>.

您的更改很容易出错,每次应用程序更新都会覆盖这些更改。

或者,至少对于 Finder按种类排列,您可以编辑核心类型定义并将您自己的定义添加到其中。确保编辑文件的副本并在编辑后替换它以规避权限问题。请注意,您将通过这样做来编辑和替换核心系统文件(即自找麻烦)。

更明智的解决方案是创建一个新的“虚拟”应用程序,该应用程序简单地将文件类型 UTI 声明为导出类型 UTI。这将由 OS X 的文件类型数据库使用,您可以更新 OS X 和 MPlayerX 而不会丢失内容类型关联。即使您更改.m4a为 MPlayerX,仅更改Kind列,它仍然在Movie类别中,因为另一个应用程序中的声明独立于关联的应用程序。

因此,创建一个新应用程序,例如使用 Automator 在启动时实际上不执行任何操作,并将以下内容添加到其Contents/Info.plist文件中:

在此处输入图片说明

保存在/Applications左右,然后重新启动 Finder。

在此处输入图片说明

文件的部分mdls输出,.mkv“助手应用程序”提供的内容类型,关联播放器(MPlayerX)提供的项目类型:

kMDItemContentType             = "superuser.371939.mkv"
kMDItemContentTypeTree         = (
    "superuser.371939.mkv",
    "public.movie",
    "public.audiovisual-content",
    "public.data",
    "public.item",
    "public.content"
)
...
kMDItemKind                    = "Video Media"
Run Code Online (Sandbox Code Playgroud)

由于这只是开发人员草率的平台集成,您可能应该提交错误。