A resposta curta é find /var/log/app -type f -mtime +30 -delete. A longa: rode primeiro sem -delete, porque a versão que dá errado leva o diretório inteiro junto. Esta é a ordem segura, dita do jeito que você falaria em voz alta.
1. Primeiro me mostre o que sairia
$ clai mostre os arquivos em /var/log/app com mais de 30 dias, não apague nada→ find /var/log/app -type f -mtime +30 -printf '%TY-%Tm-%Td %p\n'2026-06-01 /var/log/app/app-june.log2026-07-10 /var/log/app/app-july.log
find sem uma ação apenas imprime. Leia a lista antes de confiar nela — este é o passo que todo mundo pula.
2. Quanto espaço isso liberaria de verdade
$ clai quanto espaço em disco esses arquivos antigos liberariam→ find /var/log/app -type f -mtime +30 -printf '%s\n' | awk '{s+=$1} END {printf "%.1f KB in %d files\n", s/1024, NR}'6.0 KB in 2 files
Se a resposta for alguns kilobytes, o problema do seu disco não está aqui e você pode parar.
3. Agora apague
$ clai apague esses arquivos com mais de 30 dias→ find /var/log/app -type f -mtime +30 -delete
-delete não imprime nada quando dá certo. Esse silêncio é normal.
4. Só .log, só o primeiro nível
$ clai apague apenas os .log com mais de 30 dias em /var/log/app, sem entrar em subpastas→ find /var/log/app -maxdepth 1 -type f -name '*.log' -mtime +30 -delete
-maxdepth 1 é o que impede uma rotina de limpeza de sair andando por um volume montado.
5. Por data de calendário, não por «N dias atrás»
$ clai encontre arquivos modificados antes de 1º de julho de 2026→ find /var/log/app -type f ! -newermt '2026-07-01' -printf '%TY-%Tm-%Td %p\n'2026-05-01 /var/log/app/old.txt2026-06-01 /var/log/app/app-june.log
Útil quando o corte é uma data de release e não uma janela móvel.
6. Limpar os diretórios vazios que sobraram
$ clai remova as pastas vazias que sobraram em /var/log/app→ find /var/log/app -mindepth 1 -type d -empty -delete
-mindepth 1 impede que o find apague o próprio diretório que você apontou.
Pegadinhas
-deletevai por último. Ofindavalia a expressão da esquerda para a direita, entãofind . -delete -mtime +30apaga tudo antes de sequer checar a idade. É o erro de digitação mais caro deste artigo.-mtime +30significa no mínimo 31 dias. Ofindtrunca para períodos inteiros de 24 horas e+30é estritamente maior que 30, então um arquivo de 30,5 dias não é encontrado.- Não use
-atime. A maioria dos sistemas monta comrelatime, e o horário de acesso é atualizado no máximo uma vez por dia. Conte pela data de modificação (-mtime) ou de mudança (-ctime).
Perguntas relacionadas
Por que o find -delete apagou mais do que eu esperava? Quase sempre é a ordem das flags — veja a primeira pegadinha. O -delete também implica -depth, o que muda a forma como a árvore é percorrida.
Como rodo isso toda noite? Coloque o comando já testado no cron com caminhos absolutos: 0 3 * * * find /var/log/app -type f -mtime +30 -delete. Teste na mão antes — o cron tem outro ambiente e uma plateia bem menor para os seus erros.
Funciona no macOS? Sim, o find do BSD aceita -mtime, -delete e -maxdepth. O -printf é exclusivo do GNU, então use -print no macOS.
Veja também
- Cron sem quebra-cabeça: «toda segunda às 3h» → agendamento pronto
- Pare de decorar as flags do find: peça o que você quer
- Limpe logs e backups antigos com uma frase
Não tem certeza se um comando é seguro? O CliAI marca cada comando gerado como SAFE, CAUTION ou DANGER antes de rodar, e os destrutivos exigem confirmação digitada. Instale em uma linha.