2 votes

Comment reproduire l'option --recursive de grep dans une ancienne version de grep

Je travaille sur un ancien système UNIX dont les grep n'a pas l'option -r/--récursif.

Je dois trouver une erreur provoquée par notre application, mais je ne sais pas dans quel fichier journal notre application écrit les erreurs. Cependant, je sais que le fichier journal se trouve quelque part dans /opt . Je veux donc trouver FooErrorMessage sous /opt en *.log . Voici ce que j'ai essayé :

find /opt | xargs grep FooErrorMessage

-- mais cela ne fonctionne pas, et je ne sais pas où spécifier que je veux seulement *.log dans la commande.

5voto

goths Points 2412

Vous essayez simplement de trouver tous les fichiers journaux sous /opt et les rechercher somethnig_I_am_looking_for n'est-ce pas ? Pourquoi ne pas le faire ?

find /opt -name '*.log' | xargs grep something

ou

find /opt | grep .log | xargs grep something

?

Oh, et puisque je n'arrive pas à trouver comment commenter les autres réponses : faites attention avec *.log car le Shell interprétera cela comme un globbing, et fera correspondre tous les fichiers dans le répertoire courant qui se terminent par .log . Vous devez utiliser soit \*.log, soit '*.log'.

4voto

Olivier Tharan Points 41

Méfiez-vous des noms de fichiers contenant des espaces, car cela est autorisé par Unix ; xargs s'en étouffe. Utiliser find /opt -name '*.log' ... -print0 | xargs -0 grep ... Ces options sont conçues pour aller de pair.

De plus, grep ou votre Shell peut avoir un nombre limité d'arguments, et la liste des fichiers renvoyés par find peut dépasser ce nombre. Utilisez l'option -n number de xargs pour exécuter grep par morceaux de nombre des dossiers.

3voto

Besi Points 492

Avez-vous perl ?

essayer -- http://betterthangrep.com/

1voto

Chad Huneycutt Points 2076

find /opt -type f -name *.log -print | xargs grep 'something_I_am_looking_for'

1voto

Jorge Bernal Points 454

Outre l'ajout de "-name '*.log'", essayez d'ajouter -n1 à xargs.

Peut-être que votre ancien grep ne peut pas prendre plusieurs fichiers en entrée, alors -n1 lancera grep pour chacun de ces fichiers, au lieu de les passer comme arguments en une seule fois

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X