Home / Dicas e Tutoriais / Agendando a Limpeza de Arquivos Mais Antigos Que X Dias no Linux

Agendando a Limpeza de Arquivos Mais Antigos Que X Dias no Linux

Pessoal, aqui uma dica rápida de shell script.

Surgiu há algum tempo a necessidade de eu agendar via Cron a execução de um comando ou script que apagasse em determinada pasta, arquivos mais antigos que 2 meses, então fiz o script, agendei no cron e só hoje resolvi compartilhar o método que usei aqui no site.

Com isso automatizado, a cada 2 meses, ele rodará sozinho um comando que apagará arquivos mais velhos que 2 meses na pasta especificada. Muito legal não é?!

Isso pode ser usado para criar uma simples rotina automática de limpeza em seu Desktop, bem como em servidores, nos arquivos que foram feitos backup.

Obs. Você pode ter usado algum sistema ou comando para realizar backup, (como os que eu já mostrei usando o sistema de Backup Bacula, ou programa Rsync ou usando compactação com tar e gz).

Enfim, pode ser usado para limpar qualquer conteúdo de pasta. Neste caso aqui, selecionando arquivos mais antigos que o número de dias que você determinar. (Por isso é perfeito para arquivos de backup, pois provavelmente você desejará manter os arquivos mais recentes enquanto ele irá aparar os mais antigos automaticamente).

A sintaxe do comando é a seguinte.

find /pasta/dos/seus/arquivos/* -mtime +60 -exec rm {} \;

Note que há espaços entre rm, {}, and \;

Explicação

  • O primeiro argumento é o caminho dos arquivos. Isto pode ser o caminho de um diretório, e pode conter um wildcard como no exemplo acima no qual usamos o símbolo “*“. Eu recomendo o uso do caminho completo do diretório.
  • O segundo argumento é o  “-mtime“, que é usado para especificar o número de dias mais velhos que o número especificado . Se você usou o “+60”, ele irá encontrar os arquivos mais antigos que 60 dias.
  • O terceiro argumento, “-exec“, lhe permitirá executar um comando como o “rm”. O {} \; no final da linha é requerido para terminar o comando.

Funciona no Ubuntu, Suse, Redhat, e em muitas outras Distribuições Linux.

Criando um Script e Agendando no Cron.

Por exemplo, para apagar o conteúdo de sua pasta de Downloads mais antigos que 1 mês.
Você pode criar um arquivo de shell script com o seguinte conteúdo.

#! /bin/bash
find /home/seu-user/Downloads/* -mtime +60 -exec rm {} \;

Salve o arquivo com um nome por exemplo “apaga-arquivos-velhos.sh”

Dê permissão de execução no script:

chmod +x apaga-arquivos-velhos.sh

Obs. O comando “find” pode ser usado para vários fins. Aqui estamos usando para encontrar arquivos mais antigos que “tantos” dias, mas você pode usá-lo, por exemplo, para encontrar aquivos de determinado tipo, como arquivos de imagem tipo jpg e então usar o “-exec” para copiar ou deletar ou fazer o que você quiser.
Em um exemplo de encontrar e apagar arquivos “jpg”, e então apagá-los, a sintaxe seria:

find /home/seu-user/Downloads/* -name "*.JPG" -exec rm {} \;

Em um exemplo de encontrar esses arquivos jpg, mas apenas os mais antigos que uma semana, e então apagá-los, basta usar os dois parâmetros juntos:

find /home/seu-user/Downloads/* -name "*.JPG" -mtime +7 -exec rm {} \;

Beleza?! 😉

Então vamos continuar com nosso exemplo e agendar isso para rodar automaticamente.

Agendando no Cron

Use o comando:

crontab -e

(Se for a primeira vez que está usando o cron, recomendo o uso do editor de texto “nano” (pois é o mais fácil), quando ele lhe perguntar qual deseja usar. Opção 2, conforme a imagem abaixo)

cron1

Adicione uma linha que agendará a execução de seu script a cada 2 meses. No exemplo abaixo defini que as 8:30 hs, no primeiro dia do mês, a cada 2 meses, em qualquer dia da semana que cair, ele rodará o script.

30 08 01 */2 * /caminho/do/seu/script/apaga-arquivos-velhos.sh

Obs. Se desejar, ao invés de criar um script, e colocar no agendamento do cron abaixo o caminho dele, você poderá substituir isso pelo comando diretamente. Ficaria assim:

30 08 01 */2 * find /home/seu-user/Downloads/* -mtime +60 -exec rm {} \;

Usando o nano, salve as alterações com o Ctrl+O e para sair Crtl+X.

Obs. Se estiver usando o “vi” para editar o texto (muitas distros Linux tem o “vi” como editor padrão do cron). Daí usa-se a letra “i” para inserir textos “dd” para apagar a linha se precisar, e tecla “esc” e “:wq!” para salvar e fechar, ou tecla “esc” e “:q!” para fechar sem salvar.

Saiba mais sobre o uso do “Vi”: Usando o Vi no Linux
Para saber mais sobre o cron: Agendador de Tarefas Cron

Bom, é isso aí galera,

Abraços,

Cleuber

About Cleuber

Cleuber Silva Hashimoto. Administrador

4 comments

  1. Obrigado man! Acabei de precisar fazer isso agora em um servidor da empresa.

  2. Lucas Morrone Vicente

    Olá. muito bom artigo.

    Gostaria de propor apenas uma pequena correção

    De
    find /home/seu-user/Downloads/* -name “.JPG” -mtime +7 -exec rm {} \;
    para
    find /home/seu-user/Downloads/* -name “*.JPG” -mtime +7 -exec rm {} \;

    vlw!!

Leave a Reply

x

Check Also

Elementary OS 6 Odin Lançado – Confira as Novidades

Desenvolver um sistema operacional não é ...