3 votos

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

Para apoyar la recopilación de información de herramienta, me gustaría ser capaz de buscar varias aplicaciones por nombre (o más bien por su ID de paquete) y buscar sus versiones.

No me gusta el uso de la find comando para esto como que no va a encontrar todas las posibles aplicaciones, o se va a tomar para siempre.

Hay lsregister -dump, que se sabe acerca de todas las aplicaciones que me interesan, pero que comando parece ofrecer ninguna opción para buscar información único sobre aplicaciones específicas. Yo tendría que filtrar el resultado con grep, pero no puedo entender cómo filtrarla para que yo pueda buscar una aplicación del paquete de ID, pero también conseguir la versión (que aparece en una línea diferente).

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

Supongamos, por ejemplo, supongamos que queremos saber sobre todas la "Palabra" de las aplicaciones, como la de 2008, 2011 y 365 versiones.

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

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

Que no es útil para consultar la versión es?

Con mdfind "kMDItemCFBundleIdentifier == com.microsoft.Word" me gustaría obtener las rutas de acceso:

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

Pero, ¿cómo puedo obtener la versión de que? Pensé en el filtro de los trazados resultantes con xargs pero que no funciona con los espacios en los caminos.

4voto

Vagner Puntos 163

Hay una forma rápida de buscar cuál es la versión instalada para todas las aplicaciones de una carpeta en particular.

Tomando un ejemplo, /Aplicaciones de la carpeta:

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

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

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

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

Si usted necesita sólo para una aplicación en particular, simplemente cambie find de búsqueda.

Algo como esto:

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

Para utilizar este servicio, usted sólo debe saber de la aplicación de la ubicación de la carpeta.

2voto

zimbatm Puntos 2525

Una solución usando mdfind y mdls como un one-liner:

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

Esta sería la impresión (si ambos Office 2008 y 2011 están instalados):

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

Eso es suficiente para mis necesidades. Todavía me pregunto si hay una manera de obtener la información de lsregister o una herramienta similar que se ve en la puesta en marcha de los Servicios de registro.

0voto

Oskar Puntos 1242

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 sólo tengo las primeras 10 respuestas con el | head comando. Usted necesita escoger un lenguaje de secuencias de comandos o el idioma para controlar el paso de los resultados de la búsqueda para el examen de la versión. O usted podría poner en los archivos temporales. Usted necesitará para manejar los espacios en los nombres de archivo o simplemente copiar / pegar cosas una vez que vea que la lista de aplicaciones que usted necesita.

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