Некоторые картинки не загружаются из РФ и РК, используйте VPN.

пятница, 2 декабря 2022 г.

Bash script аналог удаления файлов видеорегистратора

Удаление 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


Комментариев нет:

Отправить комментарий