Die Manpage von mdfind
sagt 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.db
unter .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_shared
Prozesse und erstellt das .Spotlight-V100
Verzeichnis neu.
Ich sehe auch nicht, wie mdls
und mdfind
könnte erweiterte Attribute verwenden, wie in dieser Antwort angegeben , da der Aufruf xattr -l ~/Downloads/MacVim.dmg
keine Ausgabe erzeugt, während mdls ~/Downloads/MacVim.dmg
mehrere kMD*
Attribute angezeigt werden.
mdfind
konsultiert die Spotlight-Datenbank, um Suchergebnisse schneller bereitzustellen, als das gesamte Dateisystem für jede Abfrage zu durchsuchen.
mdls
andererseits 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 ( mdls
in diesem Fall) in einem einheitlichen Format übergeben. Diese Quellen sind zum Beispiel:
Beachten Sie, dass einige Importer-Plugins extern sind - dh kleine Programme, die separat von Spotlight selbst gespeichert werden. Zum Beispiel /System/Library/Spotlight
finden 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 .dmg
Datei, 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 -d2
bedeutet, dass Sie alle importierten Metadatenattribute sehen, außer kMDItemTextContent
denen, 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 -d3
stattdessen 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).