J'ai un répertoire avec des journaux de plantage et j'aimerais utiliser une instruction conditionnelle dans un script bash basé sur une commande find.
Les fichiers journaux sont stockés dans ce format:
/var/log/crashes/app-2012-08-28.log
/var/log/crashes/otherapp-2012-08-28.log
Je souhaite que l'instruction if ne renvoie true que s'il existe un journal des plantages pour une application spécifique qui a été modifiée au cours des 5 dernières minutes. La find
commande que j'utiliserais est:
find /var/log/crashes -name app-\*\.log -mmin -5
Je ne sais pas comment intégrer cela if
correctement dans une déclaration. Je pense que cela pourrait fonctionner:
if [ test `find /var/log/crashes -name app-\*\.log -mmin -5` ] then
service myapp restart
fi
Il y a quelques domaines où je ne suis pas clair:
- J'ai regardé les drapeaux if mais je ne sais pas lequel, le cas échéant, je devrais utiliser.
- Ai-je besoin de la
test
directive ou dois-je simplement traiter les résultats de la commande find directement, ou peut-être utiliserfind... | wc -l
pour obtenir un nombre de lignes à la place? - Pas 100% nécessaire pour répondre à cette question, mais
test
est-ce pour tester les codes de retour que les commandes retournent? Et ils sont en quelque sorte invisibles - en dehors destdout
/stderr
? J'ai lu laman
page mais je ne sais toujours pas quand l'utilisertest
et comment la déboguer.
... -exec command ';' -quit
, mais je ne crois pas qu'il existe de solution pour le second autre que l'analyse du résultat. De plus, dans les deux cas, le principal problème avec l'analyse du résultat find
(c'est-à-dire l'incapacité à distinguer les délimiteurs des caractères dans les noms de fichiers) ne s'applique pas, car vous n'avez pas besoin de trouver de délimiteurs dans ces cas.
find ... -exec
. Voir également les exemples de commandes sous Pourquoi le bouclage sur la sortie de find est-il une mauvaise pratique?