¿Cambiar la asociación de archivos en el terminal?

16

¿Existe un método para asociar tipos de archivos con aplicaciones a través de terminal? Pensé que ~ / Library / Preferences / com.apple.launchservices.plist podría hacerlo, y también he visto: ¿Por qué un cambio en la línea de comando a ~ / Biblioteca / Preferences / com.apple.LaunchServices.plist no es efectivo inmediatamente? pero Parece que no puedo hacerlo funcionar.

Supongo que estoy buscando una manera de imitar lo que hace la GUI cuando alguien la usa para cambiar los tipos de asociación, parece que funciona instantáneamente ...

    
pregunta knishka 16.05.2013 - 16:19

4 respuestas

7

Puedes editar ~/Library/Preferences/com.apple.LaunchServices.plist en un editor de texto después de convertirlo a XML:

plutil -convert xml1 ~/Library/Preferences/com.apple.LaunchServices.plist

Luego agregue entradas como esta a la matriz LSHandlers :

<dict>
  <key>LSHandlerContentType</key>
  <string>com.adobe.pdf</string>
  <key>LSHandlerRoleAll</key>
  <string>net.sourceforge.skim-app.skim</string>
</dict>
<dict>
  <key>LSHandlerContentTag</key>
  <string>mkv</string>
  <key>LSHandlerContentTagClass</key>
  <string>public.filename-extension</string>
  <key>LSHandlerRoleAll</key>
  <string>org.videolan.vlc</string>
</dict>

Puedes usar mdls para ver las UTI de los tipos de archivos y algo como osascript -e 'id of app "AppName"' para ver los identificadores de paquetes de las aplicaciones.

Puedes aplicar cambios a com.apple.LaunchServices.plist reiniciando. Cerrar sesión y volver a entrar no es suficiente.

También uso duti . He guardado un archivo como este (con aproximadamente 100 líneas) como ~/.duti :

org.gnu.Emacs public.plain-text all # .txt, .text, plain text files without an extension
org.gnu.Emacs public.unix-executable all # executable scripts
com.SequentialX.Sequential .jpg all
org.videolan.vlc .mkv all

Tengo un agente launchd que ejecuta duti ~/.duti automáticamente cuando se cambia ~/.duti .

Normalmente, puede usar extensiones de nombre de archivo (como .jpg ) en lugar de UTI (como public.jpg ) para especificar los tipos de archivos. duti convierte las extensiones en UTI que también se aplican a otras extensiones (como .jpeg ). Para algunas extensiones como .mkv y .tex , la UTI depende de qué aplicación registró primero la extensión.

La última versión de duti (1.5.1) solo incluye código fuente, pero 1.5.0 también incluye un instalador.

    
respondido por el user495470 16.05.2013 - 23:00
5

Consulte duti :

  

duti es una herramienta de línea de comandos escrita por Andrew Mortensen, diseñada para establecer aplicaciones predeterminadas para tipos de documentos y esquemas de URL en Mac OS X.

     

Los tipos de documentos en Mac OS X se definen por lo que Apple denomina identificadores de tipo uniforme o UTI. Los archivos HTML, por ejemplo, tienen una UTI de public.html. Los documentos de Microsoft Word se describen en la UTI com.microsoft.word.doc. Apple proporciona muchas IU con Mac OS X, pero los desarrolladores pueden definir libremente las suyas, siempre y cuando la IU sea única para ese tipo de documento.

     

el nombre de duti significa "predeterminado para UTI".

    
respondido por el da4 16.05.2013 - 17:38
1

Aquí hay un agente launchd para duti que hará el truco:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>com.duti.watcher</string>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/local/bin/duti</string>
      <string>/Users/joshgummersall/.duti</string>
    </array>
    <key>UserName</key>
    <string>joshgummersall</string>
    <key>KeepAlive</key>
    <false/>
    <key>WatchPaths</key>
    <array>
      <string>/Users/joshgummersall/.duti</string>
    </array>
  </dict>
</plist>

Obviamente, reemplaza joshgummersall con tu propio nombre de usuario. Coloqué este archivo en ~/Library/LaunchAgents/duti.plist , chmmod d a 644 y corrí:

$ launchctl load -F -w ~/Library/LaunchAgents/duti.plist
    
respondido por el Josh Gummersall 10.11.2016 - 04:51
0

Respuesta corta: la asociación de aplicación de un archivo se almacena en fork de recursos , y Apple proporciona dos utilidades ( Rez y DeRez ) que permite la manipulación de las fuentes de recursos, pero esto no es para los débiles de corazón.

Para obtener más detalles, esta pregunta se responde de manera exhaustiva en el Superusuario:

respondido por el Nate 16.05.2013 - 17:13

Lea otras preguntas en las etiquetas