¿Cambiar la aplicación predeterminada (para una extensión de archivo) a través de un script / línea de comando?

8

Hay una manera de definir la aplicación predeterminada 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 puede cambiarlo manualmente a través del panel de información o usando RCDefaultApp pero como tengo que configurar Muchas máquinas y cuentas de usuario me gustaría encontrar una forma de automatizar el proceso.

    
pregunta oschrenk 24.04.2012 - 14:48

3 respuestas

4

duti es una utilidad de shell que permite usar un archivo de texto para configurar las aplicaciones predeterminadas para tipos de archivos y esquemas de URL.

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

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

Luego ejecuta duti ~/.duti .

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

    
respondido por el user495470 24.04.2012 - 16:16
9

Launch Services es responsable de las asociaciones de archivos predeterminadas.

Digamos que quería cambiar todos los archivos de texto para abrirlos en Sublime Text 2.

Primero necesito kMDItemCFBundleIdentifier para texto sublime 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 para los archivos de texto al inspeccionar 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, cambiaré la aplicación predeterminada para todos los tipos public.plain-text .

Para hacer esto 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 inicio de la siguiente manera:

/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 se debe el crédito, aprendí sobre este enfoque con esta pregunta y respuesta de stackoverflow.com: enlace

    
respondido por el Ian C. 24.04.2012 - 15:58
0

Este la publicación en SuperUser también contiene información útil. Para obtener más información sobre LaunchServices, aquí hay un enlace a la documentación del desarrollador de Apple en eso. Vaya a la sección titulada LSSetDefaultRoleHandlerForContentType (página 48).

    
respondido por el John Rygielski 24.04.2012 - 16:15

Lea otras preguntas en las etiquetas