Utilizzare mdfind per identificare tutti i dmg crittografati?


5

Qualcuno può suggerire un modo intelligente per identificare tutti i dmg crittografati?

La mia unica idea è piuttosto complicata. utilizzare mdfind '(kMDItemFSName=*.dmg)'e quindi testare la risposta hdiutil imageinfoe registrare il risultato di coloro che richiedono una password. Grazie alla risposta e ai commenti, il seguente comando esegue tutto il dmg attraverso hdiutil, ma non riesco a capire come identificare quelli che danno un errore. Qualche idea?

mdfind -0 "kMDItemFSName=*.dmg" |xargs -0 -I{} -L 1 hdiutil imageinfo {}

1
AFAIK Non esiste un attributo di file esteso per i .dmgfile crittografati , ad esempio l'utilizzo ls -l@potrebbe indicare che com.apple.metadata:kMDItemDownloadedDatenon esiste un com.apple.metadata:kMDItemEncrypted. Puoi vedere gli attributi dei metadati di un file usando mdls. Quindi l'utilizzo hdiutil imageinfoè probabilmente l'unico modo per ottenere direttamente dal file stesso. Potresti copiarlo e reindirizzare l'output di hdiutil imageinfoa grep, ecc. Ed elaborarlo ulteriormente in modo che l'output finale possa essere un elenco di file crittografati, ecc. Tutto dipende da ciò che stai cercando di realizzare all'inizio.
user3439894,

Ciao. Voglio solo sapere quali dmg sono crittografati. Per fare un elenco.
jakethedog,

Risposte:


1

Al momento sul mio disco locale ho 88 file .dmg , tre dei quali sono crittografati. Prima di eseguire la riga di comando qui sotto non sapevo quanti file .dmg crittografati avessi e se ce ne fossero, dove fossero. Quindi, sebbene la seguente riga di comando possa apparire contorta, dovrebbe funzionare come pubblicizzato.

Apri Terminale e copia e incolla l'intera riga di comando sottostante, così com'è, nel Terminale, quindi premi Invio .

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

Questo creerà due file, dmg_file_list e encrypted_dmg_file_list , e l'uscita il contenuto di quest'ultimo al terminale. I file possono anche essere aperti in un editor di testo.

I file conterranno il percorso completo dei file .dmg seguito da uno spazio e crittografato: NO o crittografato: SÌ nel file dmg_file_list e solo il percorso completo dei file .dmg seguito da uno spazio e crittografato: SÌ in il file crittografato_dmg_file_list .

È quindi possibile eliminare manualmente i due file creati dal comando al termine.

Nota: una volta eseguita la riga di comando, potrebbe essere necessario attendere qualche istante per elaborare e inviare i contenuti del file crittografato_dmg_file_list al Terminale. Dipenderà da quanti file .dmg ci sono.

Ecco la riga di comando completa mostrata con la continuazione della riga in modo da assicurarti di copiare e incollare l'intera riga. (Puoi effettivamente copiare e incollare la riga di comando anche in questo 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

Probabilmente chiederei "crittografato: SÌ" nel caso in cui l'output delle hdiutilmodifiche in futuro. Inoltre, se lo usi, >> dmg_file_listpotresti voler rimuovere prima un file già esistente (o utilizzare > dmg_file_list).
Nohillside

@patrix, >>era un errore di battitura. L'ho corretto. Per quanto riguarda il greping per più di allora ho fatto ... bene le cose cambiano e il codice si rompe ma deve solo essere riparato. Quello che ho fornito è stato un esempio pratico di un solo modo per raggiungere l'obiettivo. Non è l'unico modo o necessariamente il modo migliore, solo un modo che ha funzionato sul mio sistema e può essere adattato, se necessario, da chiunque scelga di usarlo. Ad esempio, avrei potuto scriverlo in modo che il file crittografato_dmg_file_list avesse appena il nome percorso completo poiché il file è designato come crittografato. Non l'ho fatto perché è tardi e sono stanco. :)
user3439894,

questo ha funzionato. grazie! ma esce con un errore: LSOpenURLsWithRole() failed with error -600 for the file /Users/user/encrypted_dmg_file_list.qualche idea?
jakethedog,

Sostituisci il opennell'ultima riga con cat, questo elencherà i volumi crittografati direttamente nel Terminale.
Nohillside

@melchior, secondo il catsuggerimento di patrix, ho modificato la riga di comando in quanto non dipende dall'apertura di eventuali modifiche rispetto all'impostazione predefinita con Launch Services. Puoi sempre aprire i file manualmente anche in un editor di testo.
user3439894,

2

Spotlight non ha metadati sufficienti per differenziare le scelte del filesystem memorizzate all'interno di un DMG. Detto in altro modo, è come chiedere quali documenti di Pages contengono parole francesi solo usando mdls. I dati per effettuare quella ricerca non sono contenuti nei metadati.

Il comando corretto per verificare se un file di immagine specifico è crittografato è hdiutil isencrypted /path/to/dmg

Esempio:

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

Produzione:

encrypted: YES
blocksize: 512
uuid: DE78A7BE-2B64-4556-8EC9-93DFAC15A839
private-key-count: 0
passphrase-count: 1
max-key-count: 1
version: 2

Come funzionerebbe insieme a mdfind ecc?
Nohillside

1
@patrix Sto solo cercando di creare il corretto mdfind | xargs | comando hdiutil (| grep)
klanomath,

Questo è +1 da parte mia. Confina con i "compiti a casa" e "fai il mio lavoro per me", che è ciò che l'OP sembra cercare dalle domande recenti, @patrix
bmike

1
@bmike è vicino, ma non riesco a capire come mostrare il file che risulta crittografato: SÌ. E per la cronaca, è un progetto molto personale, alla ricerca di un particolare dmg su centinaia di oltre dieci anni fa. Questo mi aiuterà molto. molto tempo fa i compiti.
jakethedog,

Eccellente @melchior - imparare il pipe-fu è difficile. Il mio suggerimento principale è di reindirizzare l'output del comando parziale in un file, quindi di cat quel file al comando successivo. Quindi puoi vedere con cosa stai lavorando e se hai un errore strano, prova a ispezionare i dati per vedere quale pezzo sta causando l'errore
bmike

1

Una soluzione che utilizza mdfind -0e 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'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.