web-dev-qa-db-fra.com

comment effectuer l'opération grep sur tous les fichiers d'un répertoire

Travailler avec xenserver, et je veux exécuter une commande sur chaque fichier se trouvant dans un répertoire, récupérant des éléments de la sortie de la commande et les ajoutant à un fichier.

Je suis clair sur la commande que je veux utiliser et sur la façon de supprimer les chaînes selon les besoins.

Mais ce que je ne comprends pas bien, c'est comment puis-je lui demander d'exécuter cette commande sur chaque fichier, en passant au suivant, jusqu'à ce qu'aucun fichier ne soit trouvé.

175
user2147075

grep $PATTERN * serait suffisant. Par défaut, grep ignorerait tous les sous-répertoires. Cependant, si vous voulez passer par eux, grep -r $PATTERN * est le cas.

188
umi

Sous Linux, j'utilise normalement cette commande pour grep récursivement pour un texte particulier dans un répertoire

grep -rni "string" *

où,

r = récursif i.e, recherche dans les sous-répertoires du répertoire courant
n = pour imprimer les numéros de ligne sur la sortie standard
i = recherche insensible à la casse

124
Narain

Utilisez find. Sérieusement, c'est la meilleure façon de procéder, car vous pouvez alors vraiment voir sur quels fichiers il opère:

find . -name "*.sql" -exec grep -H "slow" {} \;

Notez que le -H est spécifique à mac, il montre le nom du fichier dans les résultats.

28
Rob

Si vous voulez faire plusieurs commandes, vous pouvez utiliser:

for I in `ls *.sql`
do
    grep "foo" $I >> foo.log
    grep "bar" $I >> bar.log
done
2
bryan