Eu tenho uma pasta /home/usr/logs/
que contém arquivos de log com mais de 1 dia. Desejo compactar todos os arquivos de log com mais de um dia para separar arquivos compactados (por exemplo, zip ou tar.gz) e movê-los para a pasta /home/usr/logs/archive
.
Os arquivos de log estão em formatos de nomenclatura, como valid.app5s.log.1019
, app5s.gf3sts.1019
, valid.app5s.gf3log.1019
, app5s.gf3log.1019
, app5s.gf1sts.1019
, valid.app5s.gf1log.1019
, app5s.sts.1019
.
Eu tentei assim:
find . -mtime +1 -exec zip filename.zip '{}' + && mv filename.zip archive/ \;
Mas esses arquivos não estão compactados corretamente. Alguém pode me ajudar a descobrir o erro do meu código?
Responder1
logrotate pode fazer isso, a correspondência de padrão pode ser para *log, então você adiciona uma seção chamada "postrotate", considere postrotate um pequeno script bash que é executado após a rotação.
exemplo;
/home/usr/logs/*.log {
daily
missingok
compress
#delaycompress (this will prevent compressing of one day)
notifempty
create 640 root adm
sharedscripts
postrotate
mv /home/usr/logs/*.gz /home/usr/logs/archive/;
endscript
}
ATUALIZAÇÃO1:
se você quiser usar zip em vez de gzip, adicione;
compresscmd /usr/bin/zip
compressoptions -r
compressext .zip