find /home/fi -maxdepth 1 -iname log\* -type f -mmin +1800 | sort | head -n -1 | xargs rm
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 esse comando
find . -type f -name "*-23May2017-10-00hrs.log" -print
imprimiu os três arquivos de registro da minha hora atual.
Então, quando eu tentei este comando para verificar arquivos que não correspondem ao log de hora atual.
find . -type f -name "!(*-23May2017-10-30hrs.log)" -print
não me dá nada.
Como obter meus outros arquivos de log excluídos?
find /home/fi -maxdepth 1 -iname log\* -type f -mmin +1800 | sort | head -n -1 | xargs rm
Primeiro de tudo: seus processos de localização não são ignorados, para que os curingas *
sejam transformados.
Para evitar que você use barras invertidas \
ou use aspas simples '
Então: %código% deve funcionar bem.
De volta às suas perguntas reais:
Existem várias maneiras de resolver isso. Primeiro, você pode usar o recurso find . -type f -name '*-23May2017-10-00hrs.log' -print
do find para apenas ouvir todos os arquivos que a última modificação é x minutos atrás.
Vamos supor que seus logs do servidor sip estejam em -mtime
/var/log/sip/
mostrará todos os arquivos terminados em find /var/log/sip/ -type f -name '*.log' -mmin +$((24*60)) -print
e cuja última modificação foi 24 * 60 minutos (1 dia) atrás.
No entanto, você também pode usar uma ferramenta que é feita para manipulação de registro e isso é .log
.
logrotate está disponível em todas as principais distribuições unix e permite que você comprima arquivos em uma certa idade, remova-os em outro e assim por diante. A lista de recursos é bastante longa. É fácil de instalar, funciona como um daemon e você não precisa mexer com cronjobs extras.
Minhas sugestões é usar o logrotate. Confira a simplicidade em: link
Tags command-line find files linux