Script para manter um diretório de cache com um tamanho específico e removendo com base no último acesso

1

Eu preciso de um script que verifique o tamanho de um diretório e, se for maior que um tamanho especificado, ele será excluído x número de arquivos até que fique abaixo do tamanho do limite máximo novamente. E gostaria que os arquivos fossem excluídos com base no último acesso, para que os arquivos que não foram usados em um tempo sejam removidos primeiro.

Não tenho certeza se existe algum software disponível para lidar com isso já?

    
por Michael Lindfors 08.12.2017 / 15:46

1 resposta

0

Isso é bem simples:

#!/bin/bash
max_size=2000 # size in kilobytes
i=0
while [[ $(du -s "$1" | awk '{print $1}') > $max_size ]]; do
  i=$(($i+1))
  [[ -z "$file_list" ]] && file_list="$(find "$1" -type f -printf '%T@ %P\n' | sort -n | sed 's/[^ ]* //')"
  rm -f "$(head -n$i <<<"$file_list" | tail -n1)"
done

Inicie como /path/to/script.sh /path/to/dir e ele testará se /path/to/dir exceder max_size (em kilobytes) e, se for o caso, excluirá os arquivos mais antigos, um após o outro, até que max_size seja correspondido ou reduzido. Cuidado, isso exclui arquivos sem piedade , execute-o em um terminal com rm -i em vez de rm -f para testar sua funcionalidade.

Para iniciar o script periodicamente, crie um cronjob com crontab -e , por exemplo,

@weekly /path/to/script.sh /path/to/dir

para executá-lo semanalmente.

    
por dessert 08.12.2017 / 16:11