¿Usar mdfind para identificar todos los dmg cifrados?

5

¿Puede alguien sugerir una forma inteligente de identificar todos los dmg que están cifrados?

Mi única idea es bastante complicada. use mdfind '(kMDItemFSName=*.dmg)' y luego pruebe la respuesta de hdiutil imageinfo y registre el resultado de aquellos que piden una contraseña. Gracias a la respuesta y los comentarios, el siguiente comando ejecuta todo el dmg a través de hdiutil, pero no puedo averiguar cómo identificar a los que dan un error. ¿Alguna idea?

mdfind -0 "kMDItemFSName=*.dmg" |xargs -0 -I{} -L 1 hdiutil imageinfo {}
    
pregunta jakethedog 16.10.2015 - 12:03

3 respuestas

1

Actualmente, en mi disco local tengo 88 archivos .dmg , tres de los cuales están cifrados. Antes de ejecutar la línea de comandos a continuación, no sabía cuántos archivos .dmg encriptados tenía y, en su caso, dónde estaban. Por lo tanto, aunque la siguiente línea de comando puede parecer complicada, sin embargo, debería funcionar como se anuncia.

Abra Terminal y copie y pegue toda la línea de comandos a continuación, tal como está, en la Terminal y luego presione Ingresar .

mdfind '(kMDItemFSName=*.dmg)' | while IFS= read -r line; do printf "$line " & hdiutil isencrypted "$line"; done > dmg_file_list; grep ': YES' dmg_file_list > encrypted_dmg_file_list; clear; cat encrypted_dmg_file_list

Esto creará dos archivos, dmg_file_list y encrypted_dmg_file_list , y enviará el contenido de este último al Terminal. Los archivos también se pueden abrir en un editor de texto.

Los archivos contendrán la ruta de acceso completa de los .dmg seguidos de un espacio y encriptados: NO o encriptado: SÍ en el archivo dmg_file_list y solo en la ruta de acceso completa de los archivos .dmg seguidos de un espacio y encriptado: SÍ en el archivo encrypted_dmg_file_list .

Luego puedes eliminar manualmente los dos archivos creados por el comando cuando hayas terminado con ellos.

Nota: una vez que se ejecute la línea de comandos, puede tomar un momento procesar y enviar el contenido del archivo encrypted_dmg_file_list al Terminal. Dependerá de cuántos archivos .dmg haya.

Aquí está la línea de comando completa que se muestra con la continuación de la línea, así que asegúrate de copiar y pegar toda la línea. (En realidad, también puede copiar y pegar la línea de comando en este formato).

mdfind '(kMDItemFSName=*.dmg)' | while IFS= read -r line; \
do printf "$line " & hdiutil isencrypted "$line"; \
done > dmg_file_list; grep ': YES' dmg_file_list > encrypted_dmg_file_list; \
clear; cat encrypted_dmg_file_list
    
respondido por el user3439894 17.10.2015 - 08:23
2

Spotlight simplemente no tiene suficientes metadatos para diferenciar las opciones de sistema de archivos almacenadas dentro de un DMG. Dicho de otra manera, es como preguntar qué documentos de Pages tienen palabras en francés solo usando mdls . Los datos para realizar esa búsqueda no están contenidos en los metadatos.

El comando adecuado para verificar si un archivo de imagen específico está cifrado es hdiutil isencrypted /path/to/dmg

Ejemplo:

host:~ user$ hdiutil isencrypted /Users/user/Downloads/test.dmg

Salida:

encrypted: YES
blocksize: 512
uuid: DE78A7BE-2B64-4556-8EC9-93DFAC15A839
private-key-count: 0
passphrase-count: 1
max-key-count: 1
version: 2
    
respondido por el klanomath 16.10.2015 - 21:40
1

Una solución que usa mdfind -0 y xargs :

mdfind -0 "kMDItemFSName == '*.dmg'" | xargs -0 -IX ksh -c '
    if    hdiutil isencrypted "X"  2>&1 | grep -q "encrypted: YES"
    then  echo "X -ENCRYPTED"
    fi'
    
respondido por el fd0 17.10.2015 - 14:35

Lea otras preguntas en las etiquetas