Я пытаюсь создать 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 ответ1

0

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .