Wie leiten mdfind und mdls ab, welche Metadaten eine Datei hat und wo sie gespeichert werden?

Die Manpage von mdfindsagt folgendes:

Der Befehl mdfind konsultiert den zentralen Metadatenspeicher und gibt eine Liste von Dateien zurück, die der angegebenen Metadatenabfrage entsprechen. Die Abfrage kann eine Zeichenfolge oder ein Abfrageausdruck sein.

Man würde annehmen, dass die Verweise auf den „zentralen Metadatenspeicher“ store.dbunter .Spotlight-V100(wie in dieser Antwort angegeben ) aber mdls, von denen ich annehme, dass sie denselben „zentralen Metadatenspeicher“ verwenden, ohne die vorhandenen Spotlight-Dateien einwandfrei zu funktionieren scheinen. Ich habe den folgenden Befehl auf Catalina (10.15.7) ausprobiert und es gab keine Verzögerung bei der Anzeige der Ausgabe von mdls, was darauf hinweist, dass der Befehl die Spotlight-DB nicht verwendet.

sudo rm -rf /System/Volumes/Data/.Spotlight-V100 ~/Library/Metadata/CoreSpotlight/ 
mdls ~/Downloads/MacVim.dmg

Die manuelle Verwendung von Spotlight mit CommandSpacehingegen startet viele mdworker_sharedProzesse und erstellt das .Spotlight-V100Verzeichnis neu.

Ich sehe auch nicht, wie mdlsund mdfindkönnte erweiterte Attribute verwenden, wie in dieser Antwort angegeben , da der Aufruf xattr -l ~/Downloads/MacVim.dmgkeine Ausgabe erzeugt, während mdls ~/Downloads/MacVim.dmgmehrere kMD*Attribute angezeigt werden.

Antworten (1)

mdfindkonsultiert die Spotlight-Datenbank, um Suchergebnisse schneller bereitzustellen, als das gesamte Dateisystem für jede Abfrage zu durchsuchen.

mdlsandererseits ist es nicht auf die Spotlight-Datenbank angewiesen, da es das Dateisystem nicht scannen muss – Sie geben die zu untersuchende Datei direkt an. Es ist jedoch auf die Spotlight-API angewiesen, um die angeforderten Daten bereitzustellen.

Das heißt mdls, ist kein Programm, das Code enthält, der versucht, alle Arten von Dateitypen zu "parsen" oder Informationen von vielen Orten zu sammeln. Es wird dies auch nicht direkt in der Datei nachgeschlagen store.db.

Wenn Sie die Metadaten für eine bestimmte Datei über die Spotlight-API anfordern, werden Informationen an verschiedenen Stellen gesammelt und dem Programm ( mdlsin diesem Fall) in einem einheitlichen Format übergeben. Diese Quellen sind zum Beispiel:

  • die Metadaten des Dateisystems
  • die im Dateisystem gespeicherten erweiterten Attribute
  • Informationen von Anwendungsbündeln und ähnlichen Stellen
  • Informationen, die vom Spotlight-Importer-Plug-in für den jeweiligen Dateityp gesammelt wurden

Beachten Sie, dass einige Importer-Plugins extern sind - dh kleine Programme, die separat von Spotlight selbst gespeichert werden. Zum Beispiel /System/Library/Spotlightfinden Sie in normalerweise Importprogramme für Dinge wie Audiodateien, Videodateien, komprimierte Archive usw. In ähnlicher Weise können Anwendungen mit ihren eigenen Spotlight-Importprogrammen geliefert werden, die an Orten wie zum Beispiel gespeichert sind:

/Applications/Microsoft Outlook.app/Contents/Library/Spotlight/Microsoft Outlook Spotlight Importer.mdimporter

In diesem Fall zum Importieren von Daten aus Outlook in Spotlight.

Andere Plugins sind intern – dh sie sind in Spotlight integriert und benötigen keine externen Programme. Ihr Beispiel in der Frage war für eine .dmgDatei, und der Importer für diese ist intern.

Sie können den Importer für eine bestimmte Datei ausführen, um genau zu sehen, welche Attribute er dem Spotlight-Index gegeben hätte – ohne den Spotlight-Index tatsächlich zu ändern. Führen Sie einen Befehl wie diesen aus:

mdimport -t -d2 ~/Downloads/MacVim.dmg

Beachten Sie, dass dies -d2bedeutet, dass Sie alle importierten Metadatenattribute sehen, außer kMDItemTextContentdenen, die im Fall eines Dokuments normalerweise sehr groß sind und nicht in einer Terminalausgabe angezeigt werden sollten. Sie können dieses Attribut auch anzeigen, indem Sie -d3stattdessen das Argument verwenden.

Da diese Importer effektiv als Allzweckprogramme ausgeführt werden, können die Datenquellen für die Importer selbst fast alles sein. Das heißt, es ist nicht auf die Rückgabe von Daten beschränkt, die im Dateisystem selbst gefunden wurden – es könnte sogar Attribute liefern, die durch Abfragen von Cloud-Servern über das Netzwerk gefunden wurden (z. B. wenn Sie eine Datei in iCloud gespeichert haben).