Remova todos os arquivos de log, exceto o arquivo de log atual

Remova todos os arquivos de log, exceto o arquivo de log atual

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 -mtimepara 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 .loge 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

informação relacionada