Tengo un directorio con registros de bloqueo, y me gustaría usar una declaración condicional en un script bash basado en un comando de búsqueda.
Los archivos de registro se almacenan en este formato:
/var/log/crashes/app-2012-08-28.log
/var/log/crashes/otherapp-2012-08-28.log
Quiero que la declaración if solo devuelva verdadero si hay un registro de bloqueo para una aplicación específica que se ha modificado en los últimos 5 minutos. El find
comando que usaría es:
find /var/log/crashes -name app-\*\.log -mmin -5
No estoy seguro de cómo incorporar eso en una if
declaración correctamente. Creo que esto podría funcionar:
if [ test `find /var/log/crashes -name app-\*\.log -mmin -5` ] then
service myapp restart
fi
Hay algunas áreas donde no estoy claro:
- He mirado las banderas if pero no estoy seguro de cuál, si es que hay alguna, debería usar.
- ¿Necesito la
test
directiva o debería simplemente procesar directamente los resultados del comando find, o tal vez usarfind... | wc -l
para obtener un recuento de líneas? - No es 100% necesario para responder esta pregunta, pero ¿
test
es para probar los códigos de retorno que los comandos devuelven? Y son algo invisibles, fuera destdout
/stderr
? Leí laman
página, pero aún no tengo muy claro cuándo usarlatest
y cómo depurarla.
... -exec command ';' -quit
, pero no creo que haya otra solución para el segundo que no sea analizar el resultado. Además, en cualquier caso, el problema principal con el análisis del resultado de find
(es decir, la incapacidad para distinguir los delimitadores de los caracteres en los nombres de archivo) no se aplica, ya que no necesita encontrar delimitadores en estos casos.
find ... -exec
. Vea también los comandos de ejemplo en ¿Por qué es un bucle sobre la salida de find una mala práctica?