Script Bash para excluir arquivos com mais de x dias em uma árvore de subdiretórios

1

Eu tenho uma pasta /data e dentro de eu tenho muitas pastas .. Eu quero remover o conteúdo desses diretórios após 30 dias de criação, mas não o diretório em si.

Então, meu caminho seria /data/dirname/files ou /data/dirname/anotherdir/files .

O primeiro dirname precisa ser salvo, uma vez que é compartilhado via FTP.

Quando o script ou comando estiver pronto, acho que crontabbing seria uma boa ideia, certo?

Como eu faria isso?

    
por user242461 01.08.2013 / 11:05

2 respostas

4

Você pode listar recursivamente todos os arquivos regulares em \data que foram modificados pela última vez há 30 dias com

find /data -type f -mtime +30 -ls

Mas você precisa observar que mtime não é necessariamente o momento da criação. Eu não acho que é possível verificar o tempo de criação. Você só tem ctime , atime e mtime para verificar.

Se você quiser excluir esses arquivos, você pode invocar um comando similar

find /data -type f -mtime +30 -delete

Claro que você pode adicionar este comando ao seu arquivo crontab .

    
por 01.08.2013 / 11:46
2

Esta é minha sugestão:

find /data -type f -a -ctime +30 -print0 | xargs --no-run-if-empty -0 rm -f

find /data -type l -a -ctime +30 -print0 | xargs --no-run-if-empty -0 rm -f

find /data -type d -mindepth 1 -print0 | xargs --no-run-if-empty -0 rmdir --ignore-fail-on-non-empty

É um pouco mais elaborado, mas limpa arquivos, links simbólicos e diretórios vazios. As opções --no-run-if-empty, -f e --ignore-fail-on-non-empty impedem o recebimento de mensagens do seu cronjob no caso de algo não poder ser limpo.

Estou usando o ctime; Usar o mtime tem a desvantagem de que, se você descompactar um arquivo zip ou tar, as datas estarão no passado, fazendo com que os arquivos desapareçam após apenas um dia. Diretórios vazios são removidos imediatamente.

    
por 01.08.2013 / 15:02

Tags