在 Mac OS X 中搜索将打开特定应用程序的文件

在 Mac OS X 中搜索将打开特定应用程序的文件

在 Mac OS X 中,双击文件名时,该文件将使用创建该文件的应用程序打开。因此,在 Mac OS X 文件的文件描述中,一定存储了有关哪个应用程序创建了此文件的信息。请注意,这不是文件扩展名,文件可以有任何扩展名,也可以根本没有扩展名。

关于此信息有两个问题:

  1. 如何搜索将打开特定应用程序的所有文件?

  2. 如何查看和更改打开某个文件的应用程序?

答案1

打开文件的应用程序由商品种类。例如,“纯文本文档”将使用 TextMate 打开,而“TextWrangler 文本文档”将使用 TextWrangler 打开。应用程序本身负责提供这些项目类型,并将它们分配给文件,然后 OS X 将选择使用哪个应用程序来打开它们。

您可以使用以下命令检查单个文件的信息mdls

mdls -name kMDItemKind -raw some-file.txt

因此,要搜索所有可以使用 TextMate 打开的文件,请使用特定的搜索命令进行搜索商品种类

mdfind 'kMDItemKind == "Plain text document"'

您还可以将此搜索限制到某个文件夹:

mdfind -onlyin /some/folder 'kMDItemKind == "Plain text document"'

现在,如何找出应用程序提供的这些“项目种类”字符串?

转到您感兴趣的应用程序文件,然后右键单击它。选择显示包装内容...并导航至内容/资源。 打开信息列表

在这里,您可以找到应用程序可以处理的文档类型,包括其文档类型名称,这正是您可以使用 进行搜索的那个mdfind


如何查看和更改打开某个文件的应用程序?

选择文件,右键单击并单击获取信息. 更改列出的应用程序打开用:

另一个用于维护默认应用程序和关联的有用应用程序是RC默认应用

答案2

如果你更改单个文件的程序关联,它将存储在扩展属性命名com.apple.ResourceFork(AFAICT,始终在偏移量处0x108)并且可以使用从命令行访问xattr

ls -l@可以在命令行上使用以下命令列出文件的扩展属性:

$ ls -la@ test.png 
-rw-r--r--@ 1 danielbeck  staff  23580 23 Jun 20:26 test.png
    com.apple.FinderInfo       32 
    com.apple.ResourceFork   1338 
    com.apple.metadata:kMDItemIsScreenCapture      42 
    com.apple.metadata:kMDItemScreenCaptureType    51 

例如,我明确选择了预览作为应用程序打开文件获取信息窗户。

$ xattr -p -l com.apple.ResourceFork test.png 
com.apple.ResourceFork:
00000000  00 00 01 00 00 00 05 08 00 00 04 08 00 00 00 32  |...............2|
00000010  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000020  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000030  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000040  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000050  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000060  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000070  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000080  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000090  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000000A0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000000B0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000000C0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000000D0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000000E0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000000F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000100  00 00 04 04 00 00 00 1A 2F 41 70 70 6C 69 63 61  |......../Applica|
00000110  74 69 6F 6E 73 2F 50 72 65 76 69 65 77 2E 61 70  |tions/Preview.ap|
00000120  70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |p...............|
[snip]

较旧的 OS X 版本支持使用创建者代码确定打开特定文件的应用程序。某些应用程序仍会写入它们,可以通过使用 检查文件的 Spotlight 元数据来访问它们mdls。在示例中,我检查了.pxm由 Pixelmator 创建的文件。

$ mdls test.pxm 
kMDItemAlternateNames          = (
    "test.pxm"
)
kMDItemContentCreationDate     = 2012-06-23 18:23:04 +0000
kMDItemContentModificationDate = 2012-06-23 18:24:12 +0000
kMDItemContentType             = "com.pixelmator.pxm"
kMDItemContentTypeTree         = (
    "com.pixelmator.pxm",
    "public.image",
    "public.data",
    "public.item",
    "public.content"
)
kMDItemDateAdded               = 2012-06-23 18:23:04 +0000
kMDItemDisplayName             = "test"
kMDItemFSContentChangeDate     = 2012-06-23 18:24:12 +0000
kMDItemFSCreationDate          = 2012-06-23 18:23:04 +0000
kMDItemFSCreatorCode           = "PXMT"
[...]

示例输出的最后一行显示了 Pixelmator 设置的创建者代码:PXMT

相关内容