Meu servidor sip gera 3 arquivos de log para cada hora:
Progress-23May2017-10-00hrs.log Call-23May2017-10-00hrs.log Error-23May2017-10-00hrs.log
Portanto, preciso excluir todos os outros arquivos de log, exceto o registro de horas atual. Eu tentei com este comando
find . -type f -name "*-23May2017-10-00hrs.log" -print
imprimiu os três arquivos de log do meu horário atual.
então, quando tentei este comando para verificar os arquivos que não correspondiam ao registro de horário atual.
find . -type f -name "!(*-23May2017-10-30hrs.log)" -print
isso não me dá nada.
Como excluir meus outros arquivos de log?
Responder1
find /home/fi -maxdepth 1 -iname log\* -type f -mmin +1800 | sort | head -n -1 | xargs rm
Responder2
Primeiro de tudo: seus processos de localização não têm escape, para que os curingas *
sejam transformados. Para evitar isso, você pode usar barras invertidas \
ou aspas simples'
Então:
find . -type f -name '*-23May2017-10-00hrs.log' -print
deve funcionar bem.
Voltando às suas verdadeiras questões: existem várias maneiras de resolver isso. Primeiro você pode usar o recurso find -mtime
para apenas ouvir todos os arquivos cuja última modificação ocorreu há x minutos. Vamos supor que o seu servidor SIP registre em/var/log/sip/
find /var/log/sip/ -type f -name '*.log' -mmin +$((24*60)) -print
mostrará todos os arquivos que terminam com .log
e cuja última modificação foi há 24*60 minutos (1 dia).
No entanto, você também pode usar uma ferramenta feita para lidar com registros e isso é logrotate
.
logrotate está disponível em todas as principais distribuições Unix e permite compactar arquivos em uma determinada idade, removê-los em outra e assim por diante. A lista de recursos é bastante longa. É fácil de instalar, funciona como um daemon e você não precisa se preocupar com cronjobs extras.
Minha sugestão é usar o logrotate. Confira sua simplicidade em:https://linux.die.net/man/8/logrotate