15 votos

¿Cambiar la aplicación por defecto (para una extensión de archivo) mediante script/línea de comandos?

¿Existe una manera de definir la aplicación por defecto para una extensión de archivo a través de un script de Apple, comando de línea de comandos (como defaults write [...] ).

Sé que se puede cambiar manualmente a través del panel de información o utilizando RCDefaultApp pero como tengo que configurar muchas máquinas y cuentas de usuario me gustaría encontrar una forma de automatizar el proceso.

18voto

shsteimer Puntos 8749

Launch Services es responsable de las asociaciones de archivos por defecto.

Digamos que quiero cambiar todos los archivos de texto para que se abran en Sublime Text 2.

Primero necesito el kMDItemCFBundleIdentifier para Sublime Text 2. Puedo usar mdls para obtener esta información:

> 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....

Puedo averiguar el valor del tipo de contenido de los archivos de texto inspeccionando uno de ellos con 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

En este caso voy a cambiar la aplicación por defecto para todos public.plain-text tipos.

Para ello escribo:

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

Si quiero que los cambios surtan efecto tendré que reiniciar los Servicios de Lanzamiento así:

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

Y para dar crédito a quien lo merece, aprendí sobre este enfoque de esta pregunta y respuesta de stackoverflow.com: http://stackoverflow.com/questions/9172226/how-to-set-default-application-for-specific-file-types-in-mac-os-x

8voto

Fuzzy Purple Monkey Puntos 702

duti es una utilidad del shell que permite utilizar un archivo de texto para configurar las aplicaciones por defecto para los tipos de archivo y los esquemas de URL.

Por ejemplo, guarde un archivo como este ~/.duti :

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

A continuación, ejecute duti ~/.duti .

Puede instalar duti con brew install duti o ejecutando 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 .

0voto

John Rygielski Puntos 336

Este post en SuperUser también contiene información útil. Para saber más sobre LaunchServices, aquí hay un enlace a la documentación para desarrolladores de Apple al respecto. Vaya a la sección titulada LSSetDefaultRoleHandlerForContentType (página 48).

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X