
Estou tentando criar um script bash para limitar o número de arquivos a um limite de 50.000. Quero executar o script bash no crontab a cada 5 minutos para que ele possa continuar excluindo os arquivos antigos quando o número de arquivos ultrapassar o limite . Eu escrevi o código, mas ele não funciona como esperado. Ele excluiu todos os arquivos em vez de apenas os antigos. Eu pretendia excluir o último elemento até que o número de arquivos ficasse abaixo do limite. Existe uma maneira mais fácil de fazer esse processo?
LIMIT=50000
NUMBER=$(find /mnt/capture/PPO/ -maxdepth 1 -name "*.pcap" wc -l)
if [[ $NUMBER -gt $LIMIT ]] #if number greater than limit
then
FILES=$(find /mnt/capture/PPO/ -maxdepth 1 -name "*.pcap")
for f in "${FILES[@]}"
do
rm $FILES[$NUMBER-$f]
done
#delete the originals
fi
Responder1
Acho que sua variável FILES está errada. Ele encontra todos os arquivos, não apenas os mais antigos. você poderia usar algo assim:
find /mnt/capture/PPO/ -maxdepth 1 -type f -name "*.pcap" -print0 | xargs -0 ls -lt | tail -5 | awk '{print $9}'
Isso encontra os 5 arquivos mais antigos em seu diretório. Você pode então alterar esse número de acordo com suas necessidades.