Comment combiner find
et grep
pour rechercher str1
ou str2
récursivement, dans tous les fichiers *.html et *.php à partir d'un répertoire nommé /home/smith/source ? La sortie doit seulement lister les fichiers (avec le chemin d'accès), pas la chaîne de caractères recherchée. J'ai essayé de nombreuses variantes sans succès. Il existe de nombreux exemples sur la façon de procéder pour un motif de fichier ou une chaîne de caractères, mais pas pour des motifs de fichiers multiples et des chaînes de caractères multiples récursivement .
Réponses
Trop de publicités?Les autres sont tous corrects, mais avec une version moderne de grep disponible, ils sont excessifs à mon avis. Ce qui suit analysera récursivement les fichiers ayant une extension .html ou .php et renverra le nom et le chemin de chaque fichier dont au moins une ligne correspond à str1 ou str2. Notez que la répétition de -e
permettent de spécifier plusieurs chemins sans utiliser la syntaxe des expressions rationnelles.
grep -r --files-with-matches --include ' .html' --inclure ' .php' -e str1 -e str2 /home/smith/source
Un seul outil, un seul processus, pas de bifurcation supplémentaire ou d'analyse de fichiers non pertinents. Il faut juste une version relativement récente de gnu grep pour l'option --include, faute de quoi vous devrez faire un grep en plusieurs étapes comme proposé par d'autres.
egrep 'string1|string2' /home/smith/source/*.{html,php}
ou la recherche récursive de n'importe quel type de fichier à l'intérieur d'un répertoire,
egrep -R 'string1|string2' /home/smith/source
vous pouvez combiner cela avec un autre egrep dans le pipe :
egrep -R 'string1|string2' /home/smith/source | egrep '.html|.php'
Si vous utilisez ack
(voir http://beyondgrep.com ), vous pouvez faire ceci :
ack --php --html -l 'str1|str2' /home/smith/source