16 votes

Est-ce que mdfind permet les recherches joker sur les noms de fichiers ?

J'essaie de comprendre comment effectuer des recherches par caractères génériques pour les noms de fichiers avec mdfind sur OsX ? J'ai essayé : mdfind -name "*.pdf" mais ça n'a pas marché.

EDIT : Je veux être capable de trouver des noms comme "test*.pdf".

25voto

anon spyblock Points 1

Cela devrait fonctionner :

mdfind "kMDItemDisplayName == test*.pdf"

Placez le motif entre guillemets simples et ajoutez 'c' pour que la correspondance soit insensible à la casse :

mdfind "kMDItemDisplayName == 'test*.pdf'c"

Aquí est une liste d'attributs disponibles. Vous pouvez combiner plusieurs paires d'attributs/valeurs avec && .

6voto

Adi Points 1105

MacOS est livré avec la version normale de find et mdfind n'est pas un remplacement pour find .

Si vous souhaitez simplement rechercher tous les fichiers pdf dans le répertoire actuel, vous devriez probablement faire simplement ce qui suit find . -name '*.pdf'

Par défaut mdfind effectue des recherches sur le contenu et les métadonnées des fichiers, ainsi que sur l'ensemble du disque dur et non sur un seul répertoire. mdfind pdf trouve des dizaines de milliers de résultats.

Si vous devez utiliser mdfind, parce qu'il est plus rapide, vous disposez de quelques options pour limiter les résultats, par exemple :

mdfind pdf -onlyin .
mdfind 'kMDItemFSName = *.pdf' -onlyin .
mdfind 'kMDItemContentTypeTree = *.pdf' -onlyin .

Utilisez mdls pour connaître les métadonnées disponibles pour un fichier, et la syntaxe du filtrage est très minimaliste puisqu'elle doit correspondre à l'index de la base de données de votre système de fichiers.

Vous pouvez également mdfind avec grep ce qui donne la vitesse de mdfind et une correspondance regex complète sur le chemin du fichier. Par exemple :

mdfind pdf -onlyin . | grep 'pdf$'

Un dernier avertissement mdfind ne cherche pas dans votre système de fichiers réel, il ne cherche que dans la base de données des projecteurs qui peut manquer des parties du système de fichiers ou être imprécise. Utilisez find si vous souhaitez obtenir des résultats fiables. Utilisez mdfind lorsque vous préférez la rapidité à la précision et lorsque vous avez besoin de termes de recherche compliqués (par exemple, pour trouver tous les fichiers PDF créés dans une plage de dates spécifique et contenant une phrase de texte).

4voto

Haentz Points 302

Lors de la recherche explicite d'un fichier noms Selon mon expérience, le kMDItemFSName fournit des résultats plus concis. Autre suggestion : ajouter l'attribut d modificateur de comparaison (insensible aux signes diacritiques) pour, par exemple, faire correspondre un fichier appelé "Menu d'entrée.pdf" lors de la recherche de "entrée" :

mdfind 'kMDItemFSName == "*entree*"cd'

Aussi, puisque le lien de @tcmb vers la référence des attributs est mort, en voici deux qui fonctionnent : Attributs de métadonnées Spotlight y Attributs des métadonnées iCloud .

0voto

algal Points 971

Si vous souhaitez fréquemment utiliser Spotlight pour rechercher des noms de fichiers à l'aide de motifs globaux, il peut être utile de l'intégrer dans un script en sauvegardant ce code dans un fichier de type mdfindfile sur votre chemin :

#!/usr/bin/env bash
# case-insensitive search for $1, maybe in dir $2
case "$#" in
    0) echo "usage: $(basename $0) PATTERN [DIR]"
       echo ""
       echo "  Lists paths of files matching PATTERN in DIR or below"
       ;;
    1) exec mdfind "kMDItemDisplayName == '$1'c"
       ;;
    *) exec mdfind "kMDItemDisplayName == '$1'c" -onlyin "$2"
       ;;
esac

Alors vous pouvez simplement faire mdfindfile "*.pdf" pour rechercher votre machine ou mdfindfile "*.pdf" ~/Documents pour chercher sous vos documents, ou autre.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X