Mi servidor SIP genera 3 archivos de registro por cada hora:
Progress-23May2017-10-00hrs.log Call-23May2017-10-00hrs.log Error-23May2017-10-00hrs.log
Entonces necesito eliminar todos los demás archivos de registro excepto el registro de la hora actual. lo intenté con este comando
find . -type f -name "*-23May2017-10-00hrs.log" -print
imprimió los tres archivos de registro de mi tiempo actual.
Entonces, cuando probé este comando para verificar los archivos que no coincidían con el registro de tiempo actual.
find . -type f -name "!(*-23May2017-10-30hrs.log)" -print
no me aporta nada.
¿Cómo puedo eliminar mis otros archivos de registro?
Respuesta1
find /home/fi -maxdepth 1 -iname log\* -type f -mmin +1800 | sort | head -n -1 | xargs rm
Respuesta2
En primer lugar: sus procesos de búsqueda no tienen escape, por lo que los comodines *
se transforman. Para evitarlo, puede utilizar barras invertidas \
o comillas simples.'
Entonces:
find . -type f -name '*-23May2017-10-00hrs.log' -print
debería funcionar bien.
Volviendo a tus preguntas reales: hay varias formas de resolverlo. Primero, puede usar la -mtime
función de búsqueda para escuchar cada archivo cuya última modificación fue hace x minutos. Supongamos que su servidor SIP inicia sesión en/var/log/sip/
find /var/log/sip/ -type f -name '*.log' -mmin +$((24*60)) -print
le mostrará todos los archivos que terminan en .log
y cuál fue la última modificación hace 24*60 minutos (1 día).
Sin embargo, también puede utilizar una herramienta diseñada para el manejo de registros y eso es logrotate
.
logrotate está disponible en todas las principales distribuciones de Unix y le permite comprimir archivos a una determinada antigüedad, eliminarlos a otra, etc. La lista de funciones es bastante larga. Es fácil de instalar, se ejecuta como un demonio y no tienes que jugar con cronjobs adicionales.
Mi sugerencia es utilizar logrotate. Compruebe su simplicidad en:https://linux.die.net/man/8/logrotate