通过脚本/命令行更改默认应用程序(用于文件扩展名)?


11

有没有一种方法可以通过Apple脚本,命令行命令(如defaults write [...])来定义文件扩展名的默认应用程序。

我知道您可以通过信息面板或使用RCDefaultApp手动更改它,但是由于我必须设置许多计算机和用户帐户,因此我想找到一种自动执行此过程的方法。

Answers:


6

duti是一个Shell实用程序,可使用文本文件为文件类型和URL方案配置默认应用程序。

例如,将这样的文件保存为~/.duti

com.gnu.Emacs public.plain-text all 
com.gnu.Emacs public.unix-executable all
org.videolan.vlc .mkv all

然后运行duti ~/.duti

您可以brew install duti通过运行或通过安装duti wget https://github.com/fitterhappier/duti/archive/duti-1.5.2.tar.gz;tar -xf duti-1.5.2.tar.gz;cd duti-duti-1.5.2;./configure;make;sudo make install


这似乎很有希望,尽管我似乎无法在OS X 10.7.x或10.8.x:上编译它checking which SDK to use... configure: error: darwin12.0.0 is not a supported system
Mathias Bynens 2012年

pkg安装程序中的二进制文件仍适用于10.8。
Lri 2012年

我知道了。对于未来的参考,这里的链接,下载:downloads.sourceforge.net/project/duti/duti/duti-1.5.0/...
马蒂亚斯Bynens

这对10.8有用吗?我将默认应用程序设置为打开.avi文件到Quicktime Player(使用Finder→ 获取信息用...打开…→_更改全部),然后运行duti -s org.videolan.vlc public.avi all以使用VLC,然后重新启动LaunchServices,但似乎没有效果。(请参阅系统声明的UTI列表。)
Mathias Bynens 2012年

1
至少对我有用。它不需要重建Launch Services数据库或重新启动或进行任何其他操作。如果您看一下~/Library/Preferences/com.apple.LaunchServices.plist,duti会自动将大多数文件扩展名转换为UTI,因此通常可以指定类似的类型,.avi而不是public.avi。某些文件扩展名的UTI取决于安装的应用程序。
Lri 2012年

12

启动服务负责默认文件关联。

假设我想更改所有文本文件以在Sublime Text 2中打开。

首先,我需要Sublime Text 2的kMDItemCFBundleIdentifier。我可以使用mdls获取以下信息:

> mdls /Applications/Sublime\ Text\ 2.app 
_kTimeMachineIsCreationMarker  = 1
_kTimeMachineNewestSnapshot    = 4001-01-01 00:00:00 +0000
_kTimeMachineOldestSnapshot    = 2012-02-22 03:49:19 +0000
kMDItemCFBundleIdentifier      = "com.sublimetext.2"
....snip....

我可以通过使用mdls检查其中之一来找出文本文件的内容类型值:

> mdls test.txt 
kMDItemContentCreationDate     = 2012-03-25 04:18:50 +0000
kMDItemContentModificationDate = 2012-03-25 04:18:50 +0000
kMDItemContentType             = "public.plain-text"
kMDItemContentTypeTree         = (
    "public.plain-text",
    "public.text",
    "public.data",
    "public.item",
    "public.content"
)
kMDItemDateAdded               = 2012-03-25 04:18:50 +0000
kMDItemDisplayName             = "test.txt"
kMDItemFSContentChangeDate     = 2012-03-25 04:18:50 +0000
kMDItemFSCreationDate          = 2012-03-25 04:18:50 +0000
kMDItemFSCreatorCode           = ""
kMDItemFSFinderFlags           = 0
kMDItemFSHasCustomIcon         = 0
kMDItemFSInvisible             = 0
kMDItemFSIsExtensionHidden     = 0
kMDItemFSIsStationery          = 0
kMDItemFSLabel                 = 0
kMDItemFSName                  = "test.txt"
kMDItemFSNodeCount             = 975
kMDItemFSOwnerGroupID          = 20
kMDItemFSOwnerUserID           = 501
kMDItemFSSize                  = 975
kMDItemFSTypeCode              = ""
kMDItemKind                    = "Plain Text"
kMDItemLogicalSize             = 975
kMDItemPhysicalSize            = 4096

在这种情况下,我将更改所有public.plain-text类型的默认应用程序。

为此,我输入:

defaults write com.apple.LaunchServices LSHandlers -array-add '{ LSHandlerContentType = \"public.plain-text\"; LSHandlerRoleAll = \"com.sublimetext.2\"; }'

如果我希望更改生效,则需要重新启动启动服务,如下所示:

/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user

为了在应得的信用额度上给予荣誉,我从以下stackoverflow.com问题和答案中了解了这种方法:https : //stackoverflow.com/questions/9172226/how-to-set-default-application-for-specific-file在Mac OS X中的类型


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.