Eu uso find e crontab para realizar isso
# crontab -e
5 0 * * * /bin/find /path/to/logs/* -type f \( -mtime 1 ! -name "." ! -name ".gz" \) -print0 | xargs -0 gzip >/dev/null 2>&1;
-mtime n
Os dados do arquivo foram modificados pela última vez n * 24 horas atrás.
! -name
"not". * "arquivos ocultos
! -name
"não" .gz "arquivos que já devem ser compactados
-print0 & -0
para garantir que espaços ou caracteres especiais sejam canalizados corretamente para xargs - > gzip (para segurança do nome do arquivo)
find -exec poderia ser usado mas tem falhas onde | xargs
é mais estável