有没有一种方法可以通过Apple脚本,命令行命令(如defaults write [...]
)来定义文件扩展名的默认应用程序。
我知道您可以通过信息面板或使用RCDefaultApp手动更改它,但是由于我必须设置许多计算机和用户帐户,因此我想找到一种自动执行此过程的方法。
有没有一种方法可以通过Apple脚本,命令行命令(如defaults write [...]
)来定义文件扩展名的默认应用程序。
我知道您可以通过信息面板或使用RCDefaultApp手动更改它,但是由于我必须设置许多计算机和用户帐户,因此我想找到一种自动执行此过程的方法。
Answers:
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
。
.avi
文件到Quicktime Player(使用Finder→ 获取信息 → 用...打开…→_更改全部),然后运行duti -s org.videolan.vlc public.avi all
以使用VLC,然后重新启动LaunchServices,但似乎没有效果。(请参阅系统声明的UTI列表。)
~/Library/Preferences/com.apple.LaunchServices.plist
,duti会自动将大多数文件扩展名转换为UTI,因此通常可以指定类似的类型,.avi
而不是public.avi
。某些文件扩展名的UTI取决于安装的应用程序。
启动服务负责默认文件关联。
假设我想更改所有文本文件以在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中的类型
关于SuperUser的帖子还包含一些有用的信息。要了解有关LaunchServices的更多信息,请访问此处的 Apple开发人员文档链接。转到标题为LSSetDefaultRoleHandlerForContentType的部分(第48页)。
checking which SDK to use... configure: error: darwin12.0.0 is not a supported system
。