6 votes

Comment puis-je trouver une chaîne exacte dans le contenu d'un fichier à travers de nombreux dossiers à partir de la ligne de commande sur macOS ?

J'ai essayé toutes les recettes (guillemets doubles, guillemets échappés, etc.) en vain. Je ne suis pas intéressé par les fichiers contenant un ou plusieurs de ces mots, seulement la chaîne exacte. (EasyFind fait le travail.) J'utilise macOS Catalina avec zsh.

Y a-t-il un moyen de faire en sorte que mdfind détecte une chaîne exacte, disons "ce que je cherche", dans le contenu des fichiers?

9voto

Oskar Points 1242

Spotlight permet cela et est mon outil préféré, malgré la douleur d'apprendre à le faire uniquement à partir de la documentation d'Apple. La page de l'homme pour mdfind est presque criminellement négligente pour ne pas mentionner comment rechercher une chaîne, mais je ne vais pas trop râler à ce sujet ici.

mdfind 'kMDItemTextContent = "this exact string"'

Faites attention aux guillemets doubles et simples et aussi, lorsque vous cherchez de l'aide en ligne - si l'article mentionne NSPredicate ou que Spotlight utilise deux langues différentes, vous êtes sur la bonne voie. Si l'article dit que "x ne peut pas être fait", envisagez peut-être que "l'auteur n'a pas eu besoin d'apprendre à faire x pour l'instant".

Voici quelques bons endroits pour commencer avec les prédicats - la page de log, d'excellentes références de programmation comme https://nshipster.com qui survole la difficulté des expressions de recherche en "langage naturel" - surtout lorsque vous mélangez pcre/regex avec les bagages SQL.

NSPredicate est une classe Foundation qui spécifie comment les données doivent être récupérées ou filtrées. Son langage de requête, qui est comme un croisement entre une clause WHERE SQL et une expression régulière, fournit une interface expressive en langage naturel pour définir des conditions logiques sur lesquelles une collection est recherchée.

Fondamentalement, pour des raisons, Spotlight peut être très difficile pour les nouveaux venus, très déroutant syntaxiquement, mais la plupart du temps cela fonctionne bien pour quelques tâches simples et trouver une chaîne dans un fichier est plus difficile que vous ne le pensez. Le système a été conçu par des programmeurs puis une deuxième langue a été ajoutée et il y a beaucoup d'informations faciles à rechercher qui sont simplement fausses ou incomplètes.

Heureusement, il existe d'excellentes explications pour apprendre cet outil puissant.

3voto

nohillside Points 82672

Il pourrait être plus facile d'utiliser des outils dédiés à la recherche de texte dans les fichiers, par exemple grep (partie de macOS) ou ag (brew install ag):

fgrep -r "Text to match" PATH
ag -F "Text to match" PATH

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