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.