CLI AI

Apagar arquivos com mais de 30 dias no Linux, com segurança

2026-05-01

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
$ 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
$ 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
$ 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
$ 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
$ 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
$ 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

  • -delete vai por último. O find avalia a expressão da esquerda para a direita, então find . -delete -mtime +30 apaga tudo antes de sequer checar a idade. É o erro de digitação mais caro deste artigo.
  • -mtime +30 significa no mínimo 31 dias. O find trunca 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 com relatime, 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

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.