Obtenir le count combiné de toutes les occurrences d'une string sous plusieurs directorys?

J'ai un problème (j'espère) intéressant que je pourrais utiliser quelques conseils sur. J'ai un système qui est essentiellement utilisé pour stocker les journaux. Il a une structure de directory comme:

YYYY/MM/DD/hostname/ 

Il y a un certain nombre de noms d'hôtes, et sous chacun sont un tas de journaux horaires gzipped (access, erreur, etc.).

Ce qui m'intéresse, c'est le nombre total d'une string donnée dans les journaux d'access ventilés par jour et par nom d'hôte. Quelle est la meilleure façon de faire cela? Est-ce possible avec une combinaison find et grep, ou est-ce trop compliqué pour cela et a besoin d'un script?

 for d in */*/*/*; do printf '%s: ' "$d" zcat -- "$d/"*.gz | grep -Fc STRING done 

countrait le nombre de lignes contenant STRING.

Remplacer grep -Fc STRING avec grep -Fo STRING | wc -l grep -Fo STRING | wc -l (en supposant que GNU grep ) ait le nombre d'occurrences.

Remplacez zcat par gzip -dc si votre zcat ne supporte pas les files .gz .

Avec zsh et GNU grep , vous pouvez le raccourcir à:

 for d (*/*/*/*) zcat $d/*.gz | grep -FcH --label=$d STRING 

Si vous voulez faire cela sans un parsingur de journal standard, vous pouvez le faire dans une "ligne unique" de shell depuis le directory contenant vos directorys YYYY:

 for d in */*/*; do echo -n "$d : " find $d -name *.log | xargs grep -c STRING done