Comment trouver des fichiers avec certains textes dans le terminal

168

J'aimerais trouver tous les fichiers contenant une certaine chaîne de texte. Comment feriez-vous cela dans le terminal?

Svish
la source
Si vous voulez un résultat rapide, utilisez Spotlight. De même, si vous souhaitez rechercher des fichiers qui ne stockent pas nécessairement du texte directement dans le fichier, tels que PDF ou ODF.
Joey
Bon conseil, mais dans mon cas, je ne suis pas sûr que les fichiers sont indexés car ils sont sur des pilotes réseau. Et aussi ce sont des fichiers XML appartenant à un programme particulier.
Samedi
Jetez un coup d'oeil à unix.stackexchange.com/a/37932/213832 cette solution fonctionne bien
boyd4715 2/02/2017

Réponses:

280
grep -r 'text goes here' path_goes_here
Ignacio Vazquez-Abrams
la source
1
Je vous suggère man grepde découvrir toutes les merveilleuses options de grep
Ludovic Kuty
Ceci liste tous les fichiers qui existent dans le chemin et ajoute: No such file or directory J'essaie d'obtenir uniquement la liste des occurrences de texte. Comment pouvons-nous obtenir cette liste?
CP3O
7
Got it: grep -lr "text pattern" ./ -s; grep -lr "text pattern" [PATH OF PARENT] -s
CP3O
Mais cela retourne le contenu des fichiers correspondants, pas les détails du fichier (nom, chemin). La suggestion de @ CP3O fonctionne.
geotheory
28

utiliser les projecteurs

mdfind "text goes here"
mdfind -onlyin /home/user/Desktop -live "live update"

n'oubliez pas de regarder:

man mdfind
utilisateur46046
la source
2
Cela fonctionnera-t-il pour les fichiers que Spotlight n'indexe pas (par exemple, les fichiers contenus dans des dossiers cachés, les fichiers de configuration système, etc.)?
Peter Berg
Grep ne semble pas analyser les fichiers .xlsx, mais cela a bien fonctionné. Un autre exemple simple: mdfind -onlyin. "searchtext"
FvD
11
  1. À travers Ack

brew install ack ack "text goes here"

  1. À travers trouver

find . |grep "text goes here"

  1. À travers grep

grep -RnslI "text goes here"

Anant Gupta
la source
4

Vous pouvez choisir l’un des choix ci-dessous en fonction de vos goûts et de vos besoins. En supposant que vous ayez besoin de rechercher des fichiers contenant du texte - "asynchrone", de manière récursive dans le répertoire courant, vous pouvez le faire de l’une des façons suivantes:

Utiliser grep entrez la description de l'image ici

En utilisant ack entrez la description de l'image ici

karthiks
la source
2

La réponse d'Ignacio est excellente et m'a aidé à trouver les fichiers contenant certains textes. Le seul problème auquel je faisais face était que lors de l'exécution de cette commande, tous les fichiers étaient répertoriés, y compris celui pour lequel le modèle n'apparaissait pas.

No such file or directory C’est ce que je vois à côté des fichiers qui ne contiennent pas le motif.

Si au lieu de cela vous ajoutez -sà la commande, comme dans grep -lr "text pattern" ./ -s:; grep -lr "text pattern" [PATH DIRECTORY] -sest utilisé, il ne vous montrera que les fichiers contenant le motif.

De même si grep -nr "text pattern" ./ -s; grep -nr "text pattern" [PATH OF DIRECTORY] -sCette commande est utilisée, elle affiche le fichier ainsi que le numéro de ligne et l'occurrence du motif.

S'il vous plaît corrigez-moi si ma compréhension est fausse.

Référence: Comment faire pour que grep ne puisse pas imprimer les erreurs «Aucun fichier ou répertoire»?

CP3O
la source
Une autre façon d'éviter ces satanés Aucun fichier d' erreurs est de tuyau stderr à null. grep ... 2>/dev/null. Cette solution fonctionne pour la plupart des programmes, car ils signalent des messages d'erreur sur le flux stderr, et non sur stdout. J'ai utilisé cette solution à plusieurs reprises avec find, comme il sera dit, une autorisation refusée pour de nombreux fichiers.
jpaugh
(1) Si vous recevez des No such file or directorymessages pour des fichiers existants, soit vous faites quelque chose de mal, soit votre système est en panne. (2) Qu'est-ce qui [PATH OF PARENT]a à voir avec quoi que ce soit?
G-Man
@ G-Man, j'ai modifié la réponse pour indiquer [PATH OF DIRECTORY]que quelqu'un qui ne connaissait pas bien voulait savoir pourquoi j'avais mis./
CP3O, le
@ G-Man J'utilise un Mac, pas Ubuntu, je ne sais pas comment mon système serait en panne, je n'ai presque rien fait pour le moment.
CP3O