![как сделать так, чтобы количество файлов в папке было меньше установленного лимита](https://rvso.com/image/1395385/%D0%BA%D0%B0%D0%BA%20%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C%20%D1%82%D0%B0%D0%BA%2C%20%D1%87%D1%82%D0%BE%D0%B1%D1%8B%20%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%BE%20%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%20%D0%B2%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B5%20%D0%B1%D1%8B%D0%BB%D0%BE%20%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%20%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE%20%D0%BB%D0%B8%D0%BC%D0%B8%D1%82%D0%B0.png)
Я пытаюсь создать скрипт 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 самых старых файлов в вашем каталоге. Затем вы можете изменить это число в соответствии с вашими потребностями.