Encuentre aplicaciones específicas por nombre, obteniendo su versión, a través de la línea de comandos

1

Para una herramienta de recopilación de información de soporte, me gusta poder buscar varias aplicaciones por nombre (o más bien por su ID de paquete) y obtener sus versiones.

No me gusta usar el comando find para esto ya que no va a encontrar todas las aplicaciones posibles, o tardará una eternidad.

Hay lsregister -dump , que conoce todas las aplicaciones que me interesan, pero ese comando parece no ofrecer ninguna opción para buscar información solo sobre aplicaciones específicas. Tendría que filtrar el resultado con grep, pero no puedo averiguar cómo filtrarlo para poder buscar el ID del paquete de una aplicación, pero también obtener la versión (que aparece en una línea diferente).

También hay mdfind , que podría ser adecuado para mi propósito.

Por ejemplo, digamos que quiero saber sobre todas las aplicaciones "Word" instaladas, como las versiones 2008, 2011 y 365.

Con lsregister -dump | grep 'com\.microsoft\.Word' , obtendría estas líneas:

identifier:    com.microsoft.Word (0x800460c2)
activityTypes: NOTIFICATION#:com.microsoft.Word, pv-e851f8544284d1

Eso no es útil para investigar la versión, ¿verdad?

Con mdfind "kMDItemCFBundleIdentifier == com.microsoft.Word" obtendría las rutas:

/Applications/Microsoft Office 2008/Microsoft Word.app
/Applications/Microsoft Office 2011/Microsoft Word.app

¿Pero cómo obtendría la versión de eso? Pensé que filtraría las rutas resultantes con xargs pero eso no funciona con los espacios en las rutas.

    
pregunta Thomas Tempelmann 14.11.2016 - 16:22

3 respuestas

2

Una solución que usa mdfind y mdls como una sola línea:

mdfind "kMDItemCFBundleIdentifier == com.microsoft.Word" | while IFS= read -r path ; do echo "$path"; mdls -name kMDItemVersion "$path"; done

Esto se imprimiría (si se instala Office 2008 y 2011):

/Applications/Microsoft Office 2008/Microsoft Word.app
kMDItemVersion = "12.3.6"
/Applications/Microsoft Office 2011/Microsoft Word.app
kMDItemVersion = "14.6.9"

Eso es lo suficientemente bueno para mis necesidades. Todavía me pregunto si hay una manera de obtener la información de lsregister o una herramienta similar que busque en el registro de Servicios de lanzamiento.

    
respondido por el Thomas Tempelmann 14.11.2016 - 17:09
1

Hay una forma rápida de ver qué versión está instalada para todas las aplicaciones desde una carpeta en particular.

Tomando un ejemplo, / Aplicaciones carpeta:

find /Applications/*/Contents -iname "Info.plist" -maxdepth 1 -exec defaults read {} CFBundleExecutable \; -exec defaults read {} CFBundleVersion \;

Esto imprimirá el nombre y la versión de la aplicación.

Para imprimir el nombre de la aplicación:
defaults read nameOf.app/Contents/Info.plist CFBundleExecutable

Para imprimir la versión de la aplicación:
defaults read nameOf.app/Contents/Info.plist CFBundleVersion

Si solo necesita una aplicación en particular, simplemente cambie find search.

Algo así:

find /Applications/*Word/Contents -iname "Info.plist" -maxdepth 1 ...

Para usar esto, solo debes conocer la ubicación de la carpeta de la aplicación.

    
respondido por el Vagner 14.11.2016 - 17:45
0

La versión podría ser tan fácil como:

mdls -name kMDItemVersion /Applications/Microsoft\ Word.app/

El hallazgo también es fácil con Spotlight:

mdfind "kMDItemKind == 'Application'" | head

Anteriormente solo obtuve las primeras 10 respuestas con el comando | head . Tendría que elegir un lenguaje o lenguaje de scripting para manejar el paso de los resultados desde el hallazgo hasta el examen de la versión. O podrías ponerlos en archivos temporales. Tendrá que manejar los espacios en los nombres de los archivos o simplemente copiar / pegar cosas una vez que vea qué lista de aplicaciones necesita.

    
respondido por el bmike 14.11.2016 - 16:44

Lea otras preguntas en las etiquetas