¿Hay un equivalente de macOS al comando assoc de Windows?

4

Estoy buscando cambiar una asociación de archivos en Mac usando algún tipo de script. Sé que puedo hacer algo así en Windows usando el comando assoc .

¿Hay algo programable en macOS que haga un trabajo similar? No me importa si está en Bash (mi preferencia), AppleScript o algo en Automator.

Soy consciente del comando dutil pero quiero poder hacerlo sin software adicional.

    
pregunta Manngo 02.11.2018 - 04:46

2 respuestas

4

Dado que el sistema macOS utiliza las bases de datos y servicios de Launch Services para asignar tipos de archivos y, en segundo lugar, las extensiones de archivos a las aplicaciones que los abren, el análogo más cercano a assoc sería lsregister

Está oculto dentro de la carpeta del sistema, Servicios centrales, marco que contiene los Servicios de inicio.

Hay toneladas de buenas preguntas y respuestas aquí una vez que conozca la utilidad para buscar, hay toneladas de excelentes publicaciones en el blog , guías para desarrolladores y documentación oficial .

Ya que tengo / usr / local / bin en mi ruta, normalmente lo vinculo allí para que pueda hospedarlo:

mac:~ me$ ln -s /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister  /usr/local/bin
mac:~ me$ lsregister
lsregister: [OPTIONS] [ <path>... ]
                      [ -apps <domain>[,domain]... ]
                      [ -libs <domain>[,domain]... ]
                      [ -all  <domain>[,domain]... ]

Paths are searched for applications to register with the Launch Service database.
Valid domains are "system", "local", "network" and "user". Domains can also
be specified using only the first letter.

  -kill     Reset the Launch Services database before doing anything else
  -seed     If database isn't seeded, scan default locations for applications and libraries to register
  -lint     Print information about plist errors while registering bundles
  -lazy n   Sleep for n seconds before registering/scanning
  -r        Recursive directory scan, do not recurse into packages or invisible directories
  -R        Recursive directory scan, descending into packages and invisible directories
  -f        force-update registration even if mod date is unchanged
  -u        unregister instead of register
  -v        Display progress information
  -gc       Garbage collect old data and compact the database
  -dump     Display full database contents after registration
  -h        Display this help
    
respondido por el bmike 02.11.2018 - 04:56
3

Cambio de la asociación de archivos para un solo archivo o un conjunto de archivos (AppleScript)

Esta secuencia de comandos demuestra primero que la aplicación predeterminada para algún archivo de texto en mi sistema se configuró en TextEdit . Luego, cambia la asociación de archivos para ese archivo en particular, por lo que ahora se abre con Atom . Finalmente, asocia todos los archivos de texto en el escritorio con la aplicación Atom .

tell application "System Events"
    get the default application of the file "/path/to/some file.txt"
        --> alias "Macintosh HD:Applications:TextEdit.app:" of application "System Events"

    # Individual file:
    set the default application of the file "/path/to/some file.txt" to ¬
        the path to the application named "Atom"

    # A set of files:
    set the default application of every file of the desktop folder whose ¬
        name extension = "txt" to the path to the application "Atom"
end tell

Cambiar las asociaciones de archivos para todos los archivos de un tipo dado (JXA)

Al utilizar JavaScript para automatización, puede implementar las funciones de Core Foundation de una manera que no puede hacer con AppleScriptObjC, para interactuar con Launch Services en el nivel del sistema y cambiar la asociación de archivos para un archivo dado tipo.

Aquí, he dirigido archivos de texto sin formato (estos tienen la extensión .txt de manera predeterminada), y cambié la aplicación predeterminada que responde a ellos Atom :

ObjC.import('CoreServices');

var contentType = 'public.plain-text';
var bundleID = Application('Atom').id();

$.LSSetDefaultRoleHandlerForContentType(
            contentType, 
            $.kLSRolesAll, 
            bundleID
        );

El tipo de archivo debe dirigirse por medio de un < em> Uniform Type Identifier . Estas son cadenas de texto especiales que identifican de forma única una clase o tipo de elemento determinado. El enlace lo llevará a una página que enumera las UTI declaradas por el sistema de Apple para todos los tipos de archivos probables en los que estará interesado. Tenga cuidado de no elegir simplemente la que parece coincidir con sus necesidades a primera vista, ya que las UTI son Estructurado en una especie de arbol de herencia. Por lo tanto, podría haber elegido perezosamente public.text , que vi primero en la lista, hasta que en una lectura adicional, aprendamos que esta UTI es un tipo base para todo el texto, que incluiría los archivos HTML y RTF .

    
respondido por el CJK 02.11.2018 - 06:25

Lea otras preguntas en las etiquetas