Tudo o que você precisa é usar o script postado aqui ( link ). Você só precisa definir $ TrashPath.
Gostaria de criar um diretório com tamanho máximo de, digamos, 500MB. O diretório pode conter qualquer número e profundidade de subdiretórios.
Quando o limite máximo de tamanho do diretório for ultrapassado, eu gostaria de limpar o diretório do (s) último (s) arquivo (s) acessado (s) até que ele volte ao limite de tamanho. Idealmente, os diretórios vazios seriam limpos durante essa operação de limpeza.
Isso não precisa acontecer em tempo real, ou seja, se o diretório ultrapassar o máximo, contanto que seja regularmente eliminado.
Eu explorei algumas opções. Eu poderia montar a pasta como um sistema de arquivos separado e executar quota
nisso, mas isso não ajuda com a limpeza inteligente de arquivos antigos. Eu olhei (mis) usando logrotate
para este propósito, mas ele não lida muito bem com recursão ilimitada, nem tem um recurso para limpar começando do arquivo mais antigo.
Sem uma sugestão melhor, meu plano é aperfeiçoar minhas habilidades bash e escrever um script que verifique o tamanho do diretório via du -s
, e se ele achar que o diretório é maior que o máximo, ele recursivamente localizará todos os arquivos no diretório, classifica-os pela data de acesso mais antiga primeiro e, em seguida, os exclui um por um, verificando o tamanho do diretório e saindo quando o diretório estiver de volta sob o destino. Este script pode ser executado como um cron job.
Estou apenas imaginando se estou negligenciando uma ferramenta ou estratégia existente que lida com isso com mais facilidade.
(Se você está curioso para saber por que estou perguntando, estou usando s3fs para montar os buckets do Amazon S3 em um sistema de arquivos local, e estou investigando usando a opção use_cache para manter um cache local.Como os buckets do S3 podem ficar muito grandes, preciso de uma maneira inteligente de gerenciar esse cache.
Editar: tmpreaper
é outra ferramenta que acabei de descobrir e que está bem perto de fazer o trabalho. Parece apenas capaz de limpar pastas com base no tempo de acesso (não um limite de tamanho), mas em todos os outros aspectos parece ser uma boa escolha.
Tudo o que você precisa é usar o script postado aqui ( link ). Você só precisa definir $ TrashPath.
Tags unix