como manter o número de arquivos em uma pasta menor que um limite

como manter o número de arquivos em uma pasta menor que um limite

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.

informação relacionada