1 votos

Encontrar el icono de la aplicación por defecto desde el Terminal

Digamos que tengo algunos archivos

simple_doc.txt
document.pdf
website.html

El .txt se abre con textEdit por defecto, el .pdf se abre con Adobe Reader y el .html se abrirá en Google Chrome.

¿Cómo puedo averiguar esta información desde la línea de comandos? En particular, cómo puedo encontrar el icono de la aplicación por defecto para cada uno de estos archivos sólo desde la línea de comandos.

Gracias.

2voto

slm Puntos 118

Antecedentes

Hay un par de herramientas que puedes utilizar para analizar esta situación.

  • lsregister
  • defaults read

NOTA: lsregister se encuentra aquí:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Versions/Current/Support/lsregister

Navegando por lsregister

Puede utilizar este comando para navegar por la salida de lsregister :

$ cd /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Versions/Current/Support/
$ lsregister -dump | less
...
...
    --------------------------------------------------------
    claim   id:            15536
            name:          Plain text document
            rank:          Default
            roles:         Viewer
            flags:         relative-icon-path  doc-type
            icon:          Contents/Resources/document.icns
            bindings:      .txt, .text, 'TEXT', text/plain
    --------------------------------------------------------
...
...

La estructura es un poco difícil de discernir pero puedes buscar cadenas como .txt y toma nota de las líneas que le preceden.

Para ayudarnos a navegar por esta salida, podemos buscar en la GUI del Finder un tipo de archivo que nos interese, por ejemplo un .txt archivo. Selecciónelo y luego abra el diálogo de información sobre este archivo en particular ( + I ).

Por ejemplo

                              ss1

Con los detalles como el "Tipo: Documento de texto plano" y la aplicación a la que está asociado para abrirlo, "TextEdit" podemos entonces buscar a través de lsregister de salida y ver si no podemos correlacionar un poco las cosas.

Para empezar vamos a buscar ese "Tipo: Documento de texto plano".

$ lsregister -dump | grep -A5 -iE 'name:.*Plain text document'
        name:          Plain text document
        rank:          Default
        roles:         Viewer
        flags:         relative-icon-path  doc-type
        icon:          Contents/Resources/document.icns
        bindings:      .txt, .text, 'TEXT', text/plain
--
        name:          Plain text document
        rank:          Alternate
        roles:         Viewer
        flags:         apple-internal  relative-icon-path  doc-type  resolves-icloud-conflicts
        icon:          Contents/Resources/txt.icns
        bindings:      .txt, .text, 'TEXT', text/plain

Arriba podemos ver que el icono por defecto es este: Contents/Resources/document.icns .

Referencias

0voto

qarma Puntos 71

Esta es una forma programática de recuperar esta información:

osascript -e '
    on run {filepath}
        local filepath

        tell application "System Events"
            set A to the default application of the ¬
                item named filepath as alias

            set filename to the value of the property list item ¬
                "CFBundleIconFile" of property list file ¬
                (A & "Contents:Info.plist" as text)
        end tell

        try
            path to resource filename in bundle A
        on error
            try
                path to resource filename & ".icns" in bundle A
            on error
                return 0
            end try
        end try

        POSIX path of result
    end run' /path/to/file

donde /path/to/file es la ruta de cualquier archivo. El script determina primero la aplicación por defecto utilizada para abrir el archivo, y luego recupera el icono de la aplicación desde dentro del paquete de aplicaciones, devolviendo su ruta.

Puedes envolver esto dentro de una función bash de la siguiente manera:

function appicon {
    osascript -e '
       on run {filepath}
          .
          .
       end run' "$1"
}

A continuación, llámalo proporcionando una ruta de acceso a un archivo:

appicon ~/Desktop/sunset.png

que, para mí, vuelve:

/Applications/Preview.app/Contents/Resources/Preview.icns

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