Answers:
此信息存储在文件的资源分支(Wikipedia)中。这些资源分支作为扩展属性公开(Wikipedia):
$ ls -l@ somefile.txt
-rw-r--r-- 1 danielbeck staff 0 18 Mär 19:00 somefile.txt
# setting non-default application using Finder
$ ls -l@ somefile.txt
-rw-r--r--@ 1 danielbeck staff 0 18 Mär 19:01 somefile.txt
com.apple.ResourceFork 1338
从头开始编辑可能会很痛苦-许多二进制数据:
$ xattr -p com.apple.ResourceFork somefile.txt
00 00 01 00 00 00 05 08 00 00 04 08 00 00 00 32
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 04 04 00 00 00 32 2F 55 73 65 72 73 2F 64
61 6E 69 65 6C 62 65 63 6B 2F 41 70 70 6C 69 63
61 74 69 6F 6E 73 2F 53 75 62 6C 69 6D 65 20 54
65 78 74 20 32 2E 61 70 70 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 01 00 00 00 05 08
00 00 04 08 00 00 00 32 0C 00 00 00 C0 05 00 00
00 1C 00 32 00 00 75 73 72 6F 00 00 00 0A 00 00
FF FF 00 00 00 00 19 00 00 00
但是您可以将这些资源派生视为文件。例如:
$ open somefile.txt # opens in Sublime 2
$ cp somefile.txt/..namedfork/rsrc openInSublime2rsrc
$ open otherfile.txt # opens in TextEdit
$ cp openInSublime2rsrc otherfile.txt/..namedfork/rsrc
$ open otherfile.txt # opens in Sublime 2
/..namedfork/rsrc
这就是将资源派生公开给POSIX应用程序的方式(即,您可能在Terminal中执行的所有操作)。
因此,您只需要从现有资源分支创建一个“模板”文件(在此示例中openInSublime2rsrc
),然后就可以将其复制到其他文件中。
somefile.txt/..namedfork/rsrc
改用。somefile.txt/rsrc
早已弃用。
从上面Daniel Beck的答案中挑选出来的这些信息确实存储在文件的资源派生中。Apple通过开发人员工具提供了两个实用程序,分别称为“ Rez”和“ DeRez”,您可以使用它们来操纵资源派生。特别是,您可以使用Rez将资源派生推入文件中。
要从命令行更改单个文件的关联,请首先创建正确类型的文件,然后将其关联手动更改为您要在其中打开的应用程序。这将在文件中创建资源派生-如果您不这样做,这样做,将没有任何信息可以复制。然后,像这样(假定文件foo.txt,并且您要使用的应用程序是Firefox.app),用DeRez拔出资源分支。
DeRez foo.txt > foo.r
这将创建一个名为foo.r的文件,该文件是经过反编译的资源派生为文本文件。它看起来像这样:
data 'usro' (0) {
$"0000 001A 2F41 7070 6C69 6361 7469 6F6E" /* ..../Application */
$"732F 4669 7265 666F 782E 6170 7000 0000" /* s/Firefox.app... */
$"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
如果您想从头开始创建一个格式,则可以对其进行编辑,但是您必须完全正确地设置格式,否则它将不起作用。只是十六进制编码的字符,描述了所需的应用程序包的路径,以零结尾。
您可能会看到一条消息,指出资源派生为空且未初始化。如果是这样,则您尚未更改源文件上的每个文件关联,因此需要执行此操作,然后重新运行DeRez命令。
有了它之后,可以按如下所示将其推送到另一个文件中(假设存在bar.txt):
Rez foo.r -a -o bar.txt
这将使用来自foo.r的资源派生更新bar.txt。
要检查它是否可以正常工作,因为Rez和DeRez均未打印错误消息,因此请执行以下操作:
DeRez bar.txt
您应该看到与以前相同的信息。毕竟,只需按通常的方式打开文件bar.txt,它应该在正确的应用程序中打开,而不是默认的文件。
要进行批量更改,一旦有了.r文件,就可以使用如下所示的标准通配符扩展:
Rez foo.r -a -o *.txt
这将处理所有与通配符匹配的文件。
我已经在10.7上完成了此操作,但据我了解,这也适用于早期的计算机。
..namedfork/rsrc
也不做,对吗?您需要一些(半)内部知识来换取有关特定工具的知识,但我不认为这会更好。
我使用xattr做到了(它在APFS卷上完美工作)
xattr -wx com.apple.LaunchServices.OpenWith \
"`xattr -px com.apple.LaunchServices.OpenWith FILEWITHGOODTYPE`" FILETOCHANGE
如果您需要更多内容,请参阅本主题
您说要“批量更改”与给定类型的给定(子)文件集关联的应用程序。子集,因为您不想将该文件类型的所有实例更改为该新应用程序。
但是,没有简单的方法可以做到这一点。LaunchServices如何找出应告知哪个应用程序打开文件的方式是一个多阶段过程,并且取决于具有不同范围(用户,系统等)的设置。
但是-您可以open
在命令行上使用,并告诉它这次使用特定的应用程序。这不会改变任何关联,但是可以实现您想要的内容,即在特定的应用程序中打开一组文件:
open -a <appbundle> <somefile> <anotherfile>
喜欢
shiny:t fl$ ls -l
total 1848
-rwxr-xr-x 1 fl staff 1795 Mar 18 20:03 distribution.pl
-rw-r--r-- 1 fl staff 939264 Mar 18 20:03 objectreport.txt
shiny:t fl$ open -a TextWrangler distribution.pl objectreport.txt
并且完全远离命令行:看看这个实用程序:http : //michelf.com/software/magic-launch/
open -a TextWrangler *
速度更快。