Que diriez-vous de cela, que j'ai réussi à atteindre grâce, en partie, à ce poste.
Vous voulez trouver plusieurs fichiers, disons des journaux avec des noms différents mais un modèle (par exemple filename=logfile.DATE), à l'intérieur de plusieurs répertoires avec un modèle (par exemple /logsapp1, /logsapp2). Chaque fichier a un modèle que vous voulez grep (par exemple "init time"), et vous voulez avoir le "init time"fichier de chaque fichier, mais en sachant à quel fichier il appartient.
find ./logsapp* -name logfile* | xargs -I{} grep "init time" {} \dev\null | tee outputfilename.txt
Alors ce outputfilename.txtserait quelque chose comme
./logsapp1/logfile.22102015: init time: 10ms
./logsapp1/logfile.21102015: init time: 15ms
./logsapp2/logfile.21102015: init time: 17ms
./logsapp2/logfile.22102015: init time: 11ms
En général
find ./path_pattern/to_files* -name filename_pattern* | xargs -I{} grep "grep_pattern" {} \dev\null | tee outfilename.txt
Explication:
find La commande recherchera les noms de fichiers en fonction du modèle
puis, le tube xargs -I{}redirigera la findsortie vers le{}
qui sera l'entrée pour grep ""pattern" {}
Ensuite, l'astuce pour faire grepafficher les noms de fichiers\dev\null
et enfin, écrivez la sortie dans un fichier avec tee outputfile.txt
Cela a fonctionné pour moi dans la grepversion 9.0.5 build 1989.
grep --version