Удаление N старых файлов если объем занятого пространства на диске больше n
#!/bin/bash
# проверка наличия другого запущенного экземпляра
nameScript=$(basename "$0")
if [ "$(pgrep -c "$nameScript")" -gt 1 ]
then
echo "Script is run"
exit
fi
# переменные, можно переделать в параметры
# каталог из которого удаляем файлы
directory=/home/tmk/testrm
# диск у которого проверяем объем
disk=/dev/sda
# глубина поиска файлов в каталоге (избавляемся от рекурсии)
depth=1
# количество файлов к удалению за один проход
amount=10
# лимит занятого простратнства (триггер)
MaxLimit="70"
# вариант IF EXIST, если перети не удалось, значит каталог или не существует или доступа туда нет, и выходим
cd "$directory" || exit
# Пока занятоно места больше $MaxLimit, удаляем старые данные в папке.
while [ "$(df -m | grep $disk | awk '{print $5}' | sed 's/%//g'))" -lt "$MaxLimit" ]
do
# Если в каталоге, при необъходимой глубине, нет файлов, то на выход
if [ "$(find "$directory" -type f -maxdepth $depth | head -n $amount)" != "" ]
then
# Ищем в той самой папке файлы, выводим с датой, сортируем по дате и удаляем первые в списке (самые старые) по $amount штук
# т.к. перевод строки = \n, то использовать -0 для xargs не имеет смысла
find "$directory" -maxdepth $depth -type f -printf "%T@ %p\n" | sort -n | cut -d" " -f2- | sed 's/ /\\ /g' | head -n $amount | xargs rm
else
echo "Free space is low, but directory is empty"
break
fi
done
Комментариев нет:
Отправить комментарий