Ricerca metadati Spotlight Terminale con mdls e mdfind

La ricerca metadati Spotlight Terminale consente di trovare file su macOS usando informazioni come nome, tipo, autore, dimensione, data di modifica e testo indicizzato. Il comando mdls mostra i metadati associati a un singolo file, mentre mdfind cerca tra gli elementi indicizzati da Spotlight. Questa combinazione è utile quando Finder non offre filtri abbastanza precisi o quando occorre automatizzare una ricerca. I risultati dipendono dall’indicizzazione Spotlight, dai permessi di accesso e dai metadati effettivamente presenti nei file.

Cosa sono i metadati Spotlight su macOS

Spotlight conserva un indice dei file e delle relative proprietà per rendere rapide le ricerche in macOS. I metadati possono descrivere il nome del file, il percorso, il formato, la data di creazione, la data di modifica, l’autore, le parole chiave e, per alcuni documenti, anche il contenuto testuale.

Gli attributi Spotlight hanno nomi tecnici che iniziano spesso con kMDItem. Tra quelli più utili per la ricerca metadati Spotlight Terminale ci sono:

  • kMDItemFSName: nome del file.
  • kMDItemPath: percorso completo dell’elemento.
  • kMDItemContentType: tipo uniforme del contenuto, come PDF o immagine JPEG.
  • kMDItemFSSize: dimensione del file in byte.
  • kMDItemFSCreationDate: data di creazione.
  • kMDItemFSContentChangeDate: data dell’ultima modifica.
  • kMDItemAuthors: autore indicato nei metadati.
  • kMDItemKeywords: parole chiave associate al documento.
  • kMDItemTextContent: testo estratto e indicizzato da Spotlight.

Gli attributi disponibili non sono identici per tutti i file. Un documento PDF può contenere autore e titolo, mentre un’immagine può offrire modello della fotocamera, coordinate GPS o data dello scatto. Il risultato dipende dal formato e dall’importatore Spotlight utilizzato da macOS.

Come leggere i metadati di un file con mdls

mdls mostra i metadati Spotlight di un file o di una cartella. Per iniziare, apri Terminale dalla cartella Applicazioni oppure tramite la ricerca di macOS, quindi indica il percorso del file tra virgolette se contiene spazi.

mdls "$HOME/Documents/contratto.pdf"

Il comando restituisce numerosi attributi, tra cui il nome, il tipo, le date, la dimensione e, quando disponibile, il testo indicizzato. Per limitare l’output a proprietà specifiche, usa l’opzione -name più volte.

mdls 
-name kMDItemFSName 
-name kMDItemContentType 
-name kMDItemFSSize 
-name kMDItemFSContentChangeDate 
"$HOME/Documents/contratto.pdf"

L’opzione -raw elimina il nome dell’attributo e restituisce soltanto il valore. È pratica negli script, perché rende l’output più semplice da elaborare.

mdls -raw -name kMDItemFSName "$HOME/Documents/contratto.pdf"

Se un attributo non è presente, mdls può restituire il valore (null). Questo non indica necessariamente un errore: significa che il file non contiene quella proprietà o che macOS non l’ha potuta estrarre. Per individuare rapidamente quali metadati sono valorizzati, esegui mdls senza limitare gli attributi e cerca le righe che non terminano con null.

Come cercare file con mdfind e i metadati Spotlight

mdfind interroga l’indice Spotlight e visualizza i percorsi dei file che corrispondono alla ricerca. Per cercare tutti i PDF nella cartella Documenti, puoi filtrare il nome usando un carattere jolly.

mdfind -onlyin "$HOME/Documents" 'kMDItemFSName == "*.pdf"cd'

La parte -onlyin limita la ricerca alla posizione indicata. Il suffisso cd rende il confronto insensibile alle maiuscole e alle differenze diacritiche, quindi la ricerca considera equivalenti, per esempio, lettere maiuscole e minuscole.

Per cercare un tipo di contenuto tramite il suo identificatore uniforme, usa kMDItemContentType.

mdfind -onlyin "$HOME/Documents" 'kMDItemContentType == "com.adobe.pdf"'

Il filtro sul nome è spesso più compatibile tra versioni di macOS e applicazioni. Per file PDF, inoltre, possono comparire identificatori diversi in base all’importatore installato; puoi verificare il valore effettivo con mdls.

Le condizioni possono essere combinate con l’operatore &&. La query seguente cerca file PDF il cui nome contiene la parola “fattura”.

mdfind -onlyin "$HOME/Documents" 
'kMDItemFSName == "*.pdf"cd && kMDItemFSName == "*fattura*"cd'

Per cercare una parola nel testo indicizzato, usa kMDItemTextContent. Questa ricerca funziona soltanto quando Spotlight ha estratto il testo dal formato del documento.

mdfind -onlyin "$HOME/Documents" 
'kMDItemTextContent == "*garanzia*"cd'

La ricerca testuale non garantisce risultati per tutti i PDF. Un PDF ottenuto da una scansione, per esempio, può contenere soltanto immagini e richiedere il riconoscimento ottico dei caratteri prima che il testo diventi ricercabile.

Filtri per autore, data e percorso

I metadati permettono di restringere la ricerca a documenti creati o modificati in base a proprietà specifiche. Per trovare file associati a un autore, puoi usare kMDItemAuthors.

mdfind -onlyin "$HOME/Documents" 
'kMDItemAuthors == "*Rossi*"cd'

Per filtrare i documenti modificati negli ultimi trenta giorni, usa l’espressione temporale riconosciuta dal linguaggio delle query Spotlight.

mdfind -onlyin "$HOME/Documents" 
'kMDItemFSContentChangeDate >= $time.today(-30)'

Le espressioni temporali possono dipendere dalla sintassi supportata dalla versione di macOS. Se una query restituisce un errore o nessun risultato inatteso, verifica prima il valore della data con mdls e prova a restringere il filtro usando il nome o il tipo del file.

Per contare i risultati senza visualizzare ogni percorso, aggiungi l’opzione -count.

mdfind -count -onlyin "$HOME/Documents" 
'kMDItemFSName == "*.pdf"cd'

L’opzione -interpret consente a mdfind di interpretare una ricerca in stile Spotlight, più vicina alle parole usate nella ricerca di Finder.

mdfind -interpret -onlyin "$HOME/Documents" 'kind:pdf fattura'

Le ricerche interpretate sono comode per query rapide, mentre le query basate su kMDItem offrono maggiore controllo e sono più adatte agli script. Per risultati riproducibili, è preferibile specificare sempre la cartella con -onlyin e l’attributo da confrontare.

Quando mdfind non trova i file

Un risultato vuoto non dimostra che il file non esista. Il file potrebbe trovarsi in una posizione esclusa da Spotlight, non essere ancora stato indicizzato oppure avere metadati differenti da quelli usati nella query.

Puoi controllare lo stato dell’indicizzazione del volume con mdutil.

mdutil -s "$HOME"

Se Spotlight è disattivato, mdfind non può usare l’indice del volume. Anche i permessi di macOS possono impedire l’accesso a cartelle protette, come alcune directory di sistema, i dati di altre applicazioni o le cartelle di altri utenti.

Per visualizzare il percorso esatto di un risultato, mdfind restituisce già una riga completa per ogni elemento trovato. Per passare i percorsi ad altri strumenti senza problemi quando contengono spazi, puoi usare l’opzione -0, che separa i risultati con il carattere nullo.

mdfind -0 -onlyin "$HOME/Documents" 
'kMDItemFSName == "*.pdf"cd'

La ricostruzione dell’indice Spotlight può richiedere tempo e aumentare temporaneamente l’attività del disco. Evita di eseguirla senza necessità: prima verifica l’attributo corretto con mdls, il percorso di ricerca e le impostazioni di Privacy e sicurezza di macOS.

Per controllare le esclusioni configurate dall’interfaccia grafica, apri Impostazioni di Sistema > Siri e Spotlight > Privacy di Spotlight. Il nome del pannello può variare leggermente nelle versioni precedenti di macOS, dove la stessa funzione si trova in Preferenze di Sistema > Spotlight > Privacy.

La ricerca metadati Spotlight Terminale è più precisa quando conosci l’attributo da interrogare e limiti la ricerca alla cartella realmente interessata.

FAQ

mdls legge e mostra i metadati di un file specifico, mentre mdfind cerca più file nell’indice Spotlight usando query basate su nome, tipo, data o contenuto.

No. mdfind utilizza l’indice Spotlight e non individua in modo affidabile file presenti in volumi o cartelle esclusi dall’indicizzazione.

Esegui mdls su un file simile a quello che cerchi e controlla i nomi kMDItem con valori valorizzati, come kMDItemFSName, kMDItemContentType o kMDItemAuthors.

Il PDF potrebbe essere una scansione composta da immagini, avere un importatore non disponibile oppure non essere ancora stato indicizzato da Spotlight.

No. mdfind esegue ricerche in sola lettura e non modifica né i file né i metadati memorizzati da Spotlight.

Altri articoli di questa serie:

PDF Strumenti PDF gratis Nel browser, senza upload Apri gli strumenti