Verwenden Sie mdfind, um alle verschlüsselten dmg zu identifizieren?

5

Kann jemand eine clevere Methode vorschlagen, um alle verschlüsselten DMGs zu identifizieren?

Meine einzige Idee ist ziemlich kompliziert. Verwenden Sie mdfind '(kMDItemFSName=*.dmg)'und testen Sie die Antwort von hdiutil imageinfound protokollieren Sie das Ergebnis derjenigen, die nach einem Kennwort fragen. Dank der Antwort und der Kommentare führt der folgende Befehl den gesamten Befehl dmg über hdiutil aus, aber ich kann nicht herausfinden, wie diejenigen identifiziert werden, die einen Fehler verursachen. Irgendwelche Ideen?

mdfind -0 "kMDItemFSName=*.dmg" |xargs -0 -I{} -L 1 hdiutil imageinfo {}
Jake der Hund
quelle
1
AFAIK ist es nicht ein erweiterte Dateiattribut für verschlüsselte .dmgDateien, zB mit ls -l@möglicherweise zeigt com.apple.metadata:kMDItemDownloadedDatees keine ist com.apple.metadata:kMDItemEncrypted. Mit können Sie die Metadatenattribute einer Datei anzeigen mdls. Daher hdiutil imageinfoist die Verwendung wahrscheinlich die einzige Möglichkeit, direkt aus der Datei selbst zu gelangen. Sie könnten es skripten und die Ausgabe hdiutil imageinfoan grepweiterleiten usw. und weiter verarbeiten, so dass die endgültige Ausgabe eine Liste von Dateien sein kann, die verschlüsselt sind usw. Es hängt alles davon ab, was Sie wirklich erreichen wollen.
user3439894
Hallo. Ich möchte nur wissen welche dmg verschlüsselt sind. Um eine Liste zu erstellen.
Jakethedog

Antworten:

1

Gegenwärtig habe ich auf meiner lokalen Festplatte 88 .dmg- Dateien, von denen drei verschlüsselt sind. Bevor ich die Befehlszeile unten ausgeführt habe, wusste ich nicht, wie viele verschlüsselte .dmg- Dateien ich hatte und wo sie sich befanden. Die folgende Befehlszeile kann zwar kompliziert aussehen, sollte jedoch wie angekündigt funktionieren.

Öffnen Sie das Terminal, kopieren Sie die gesamte Befehlszeile darunter und fügen Sie sie so wie sie ist in das Terminal ein. Drücken Sie dann die Eingabetaste .

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

Dadurch werden zwei Dateien erstellt, dmg_file_list und encrypted_dmg_file_list , und deren Inhalt wird an das Terminal ausgegeben. Die Dateien können auch in einem Texteditor geöffnet werden.

Die Dateien enthalten den vollständig qualifizierten Pfadnamen der .dmg- Dateien, gefolgt von einem Leerzeichen und entweder verschlüsselt: NEIN oder verschlüsselt: JA in der Datei dmg_file_list und nur den vollständig qualifizierten Pfadnamen der .dmg- Dateien, gefolgt von einem Leerzeichen und verschlüsselt: JA in Die Datei encrypted_dmg_file_list .

Anschließend können Sie die beiden mit dem Befehl erstellten Dateien manuell löschen, wenn Sie damit fertig sind.

Hinweis: Wenn die Befehlszeile ausgeführt wurde, kann es einen Moment dauern, bis der Inhalt der Datei encrypted_dmg_file_list verarbeitet und an das Terminal ausgegeben wurde . Es hängt davon ab, wie viele .dmg- Dateien es gibt.

Hier wird die vollständige Befehlszeile mit Zeilenfortsetzung angezeigt. Sie müssen also die gesamte Zeile kopieren und einfügen. (Sie können die Befehlszeile auch in diesem Format kopieren und einfügen.)

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
user3439894
quelle
Ich würde wahrscheinlich nach "verschlüsselt: JA" greifen, falls sich die Ausgabe hdiutilin Zukunft ändert. Auch wenn Sie verwenden >> dmg_file_list, möchten Sie möglicherweise zuerst eine bereits vorhandene Datei entfernen (oder verwenden > dmg_file_list).
Nohillside
@ Matrix, Das >>war Tippfehler. Ich habe es korrigiert. Was das Greifen nach mehr angeht, als ich getan habe ... Nun, die Dinge ändern sich und der Code wird kaputt, aber er muss nur repariert werden. Was ich lieferte, war ein funktionierendes Beispiel für nur einen Weg, um das Ziel zu erreichen. Es ist nicht der einzige oder notwendigerweise der beste Weg, sondern nur ein Weg, der auf meinem System funktioniert und bei Bedarf von jedem angepasst werden kann, der es verwendet. Als Beispiel hätte ich es so schreiben können, dass die Datei encrypted_dmg_file_list nur den vollständig qualifizierten Pfadnamen hatte, da die Datei als verschlüsselt bezeichnet wird. Ich habe es nicht getan, weil es spät ist und ich müde bin. :)
user3439894
das hat funktioniert. Dankeschön! aber es endet mit einem Fehler: LSOpenURLsWithRole() failed with error -600 for the file /Users/user/encrypted_dmg_file_list.irgendwelche Ideen?
Jakethedog
Ersetzen Sie die openin der letzten Zeile durch cat. Dadurch werden die verschlüsselten Volumes direkt in Terminal aufgelistet.
Nohillside
@melchior, laut dem catVorschlag von patrix habe ich die Befehlszeile bearbeitet, da sie dann nicht davon abhängt, irgendwelche Änderungen von der Standardeinstellung mit Launch Services zu öffnen. Sie können die Dateien auch jederzeit manuell in einem Texteditor öffnen.
user3439894
2

Spotlight verfügt einfach nicht über ausreichende Metadaten, um die in einer DMG gespeicherten Dateisystemoptionen zu unterscheiden. Anders ausgedrückt ist es so, als würde man fragen, in welchen Pages-Dokumenten französische Wörter enthalten sind, indem man nur verwendet mdls. Die Daten für diese Suche sind nicht in Metadaten enthalten.

Der richtige Befehl zum Überprüfen, ob eine bestimmte Bilddatei verschlüsselt ist, lautet hdiutil isencrypted /path/to/dmg

Beispiel:

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

Ausgabe:

encrypted: YES
blocksize: 512
uuid: DE78A7BE-2B64-4556-8EC9-93DFAC15A839
private-key-count: 0
passphrase-count: 1
max-key-count: 1
version: 2
klanomath
quelle
Wie würde das mit mdfind usw. zusammenarbeiten?
Nohillside
1
@patrix Ich versuche nur, das richtige mdfind | zu erstellen xargs | Befehl hdiutil (| grep)
klanomath
Das ist +1 von mir. Es grenzt an "Hausaufgaben" und "mache meine Arbeit für mich", was das OP aus den letzten Fragen zu ersuchen scheint, @patrix
bmike
1
@bmike es ist nah, aber ich kann nicht herausfinden, wie man die Akte zeigt, die verschlüsselt ergibt: JA. Und für die Aufzeichnung ist es sehr viel ein persönliches Projekt, das nach einem bestimmten dmg aus Hunderten von vor über zehn Jahren sucht. das wird mir sehr helfen. lange nach den Tagen der Hausaufgaben.
Jakethedog
Excellent @melchior - Pipe-Fu zu lernen ist schwer. Mein Hauptvorschlag ist, die Ausgabe des Teilbefehls an eine Datei weiterzuleiten und diese Datei dann an den nächsten Befehl weiterzuleiten. Dann können Sie sehen, womit Sie arbeiten, und wenn Sie einen merkwürdigen Fehler haben,
überprüfen Sie
1

Eine Lösung mit mdfind -0und 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'
fd0
quelle