как сделать так, чтобы количество файлов в папке было меньше установленного лимита

как сделать так, чтобы количество файлов в папке было меньше установленного лимита

Я пытаюсь создать скрипт bash, чтобы ограничить количество файлов до лимита в 50000. Я хочу запускать скрипт bash в crontab каждые 5 минут, чтобы он мог продолжать удалять старые файлы, когда количество файлов превысит лимит. Я написал код, но он не работает так, как предполагалось. Он удалил все файлы, а не только старые. Я намеревался удалить последний элемент, пока количество файлов не станет меньше лимита. Есть ли более простой способ выполнить этот процесс?

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

решение1

Я думаю, что ваша переменная FILES неверна. Она находит все файлы, а не только самые старые. Вы можете использовать что-то вроде этого:

find /mnt/capture/PPO/ -maxdepth 1 -type f -name "*.pcap" -print0 | xargs -0 ls -lt | tail -5 | awk '{print $9}'

Это находит 5 самых старых файлов в вашем каталоге. Затем вы можете изменить это число в соответствии с вашими потребностями.

Связанный контент