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.txt
serait 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 find
sortie vers le{}
qui sera l'entrée pour grep ""pattern" {}
Ensuite, l'astuce pour faire grep
afficher 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 grep
version 9.0.5 build 1989.
grep --version