Exclui arquivos com mais de X dias +

120

Encontrei o comando para excluir arquivos com mais de 5 dias em uma pasta

find /path/to/files* -mtime +5 -exec rm {} \;

Mas como também faço isso para subdiretórios nessa pasta?

    
por Teddy291 07.04.2015 / 18:27

3 respostas

204

Tenha cuidado com os nomes de arquivos especiais (espaços, aspas) ao direcionar para o rm.

Existe uma alternativa segura - a opção -delete :

find /path/to/directory/ -mindepth 1 -mtime +5 -delete

É isso, não há uma chamada rm separada e você não precisa se preocupar com nomes de arquivos.

Substitua -delete por -depth -print para testar este comando antes de executá-lo ( -delete implica -depth ).

    
por 25.05.2015 / 18:44
10

Observe que este comando não funcionará quando encontrar muitos arquivos. Isso produzirá um erro como:

bash: /usr/bin/find: Argument list too long

O que significa que o limite da chamada do sistema exec no comprimento de uma linha de comando foi excedido. Em vez de executar rm dessa forma, é muito mais eficiente usar xargs . Veja um exemplo que funciona:

find /root/Maildir/ -mindepth 1 -type f -mtime +14 | xargs rm

Isto irá remover todos os arquivos (tipo f) modificados há mais de 14 dias em / root / Maildir / recursivamente a partir daí e mais profundamente (mindepth 1). Veja o manual de busca para mais opções .

    
por 28.10.2015 / 18:02
7

É o mesmo. Você só precisa fornecer o diretório pai em vez do prefixo dos arquivos. No seu exemplo, seria:

find /path/to -type f -mtime +5 -exec rm {} \;

Isso excluirá todos os arquivos com mais de 5 dias que estejam sob /path/to e seus subdiretórios.

Para excluir subdiretórios vazios, consulte o comentário do @Costas acima.

    
por 07.04.2015 / 18:59