Excluindo arquivos por idade

16

Existe um comando para excluir todos os arquivos em um diretório que não foram modificados em N dias? Preciso limpar alguns registros antigos.

user1024
fonte

Respostas:

24

Isso excluirá todos os arquivos com mais de 5 dias. Você também pode inserir um -name '*log'para ser mais preciso e também pode especificar um maxdepthno comando find.

find /some/dir -type f -mtime +5 -delete

Mark McKinstry
fonte
5
Embora os administradores de sistemas sábios executem a seco, em -lsvez de -deletegarantir que isso não exclua tudo o que eles queriam manter. Sim, falando por experiência aqui.
Shadur
2
Falando por experiência, eles também verificam seu caminho. ou não, desde que eu fiz a / some/dir/versão uma vez . :(
Hennes
3

Com zshe (.m+n) qualificadores glob : .seleciona apenas arquivos regulares, m+nseleciona arquivos modificados há mais de n dias;
por exemplo, liste os arquivos no diretório atual que foram modificados há mais de 9 dias:

print -rl -- *(.m+9)

adicione Dpara incluir arquivos de ponto:

print -rl -- *(D.m+9)

ou se desejar recursar (e listar, por exemplo, apenas os arquivos que terminam com .log):

setopt extendedglob
print -rl -- **/*.log(.m+9)

substitua print -rlpor rmse você estiver feliz com o resultado; embora você precise usar zargsse tiver muitos arquivos (para evitar a lista de argumentos muito longa ):

autoload zargs
zargs ./**/*(.m+9) -- rm
don_crissti
fonte