Excluindo arquivos de log mais antigos

0

Existem alguns arquivos de registro criados após um determinado período de tempo com o registro de data e hora.

/mylog/path
Log_file_2018-07-19-22-55-31Z.tgz
Log_file_2018-07-20-01-29-11Z.tgz
Log_file_2018-07-20-10-36-49Z.tgz
Log_file_2018-07-21-18-26-36Z.tgz

Preciso excluir registros antigos com base na data. Por exemplo, eu quero apenas os últimos 5 dias de logs e registros mais antigos devem ser excluídos. Número de arquivos de log criados diariamente varia. Como conseguir isso?

    
por Ravi 02.08.2018 / 07:12

2 respostas

2

Você pode fazer com mtime (tempo modificado) no comando find .

 find /mylog/path -mindepth 1 -mtime +5 -delete
  • -mindepth 1 significa processar todos os arquivos, exceto os argumentos da linha de comando.
  • -mtime +5 verificará os arquivos modificados há 5 dias.
  • -delete excluirá
por 02.08.2018 / 07:16
0

Como sua descoberta não tem a opção -mtime , acho que essa é a maneira mais simples:

#!/bin/bash
# delete every file that's between 5 and 40 days old
for i in {5..40}; do 
    olddate=$(date --date="$i days ago" +%Y-%m-%d)
    echo "Deleting files from $olddate..."
    rm "Log_file_$olddate-*"
done

Se você sempre quiser excluir os arquivos de log quando eles tiverem cinco dias, mas por algum motivo não quiser usar logrotate , você pode usar cron ( crontab -e para editar o crontab) para executar o seguinte script diariamente:

olddate=$(date --date="5 days ago" +%Y-%m-%d) && rm "/mylog/path/Log_file_$olddate-*"
    
por 02.08.2018 / 17:14