C'est ce que j'ai tapé et je ne devais obtenir que le journal de l'utilisateur dans le ""
. Mais j'ai tous les journaux sur le serveur :
for i in `ls *.log.gz`; do zcat $i | grep "U2779897722719715411" >> sara.log; done ; *
Que dois-je changer dans cette boucle pour ne trouver que les logs avec ce mot clé ?
Merci.
Réponse acceptée :
Le zgrep
La commande est très utile pour gripper dans des fichiers compressés et vous évite d'avoir à diriger zcat
à grep
. Vous n'avez pas non plus besoin d'utiliser la boucle for pour créer une liste de fichiers par globbing (correspondance de modèle shell).
zgrep U2779897722719715411 *.log.gz >> sara.log
Cette commande affichera le nom de fichier et la ligne contenant U2779897722719715411 séparés par un :
caractère.
Si vous ne voulez pas le préfixe du nom de fichier, vous pouvez utiliser le -h
option pour zgrep
:
zgrep -h U2779897722719715411 *.log.gz >> sara.log
Cela peut également être réalisé avec une boucle, mais évitez d'utiliser ls
, et effectuez la redirection vers le fichier une fois la boucle terminée :
for i in *.log.gz ; do zgrep U2779897722719715411 "$i" ; done >> sara.log
Alternativement, si vous voulez uniquement le nom de fichier des fichiers contenant cette chaîne utilisateur U2779897722719715411, vous pouvez utiliser le -l
option pour zgrep
dans l'une des commandes ci-dessus :
zgrep -l U2779897722719715411 *.log.gz >> sara.log
ou
for i in *.log.gz ; do zgrep -l U2779897722719715411 "$i" ; done >> sara.log