пятница, 31 августа 2018 г.

Скрипт bash для контроля свободного места и удаления старых файлов

Для архивных дисков. Суть - на диск производится некая архивация. Надо избежать переполнения и обеспечить ротацию файлов путём удаления самых старых файлов.
Для этого в скрипте предусмотрена переменная max, в которой задаем максимальный процент использования диска. При достижении этого процента и превышении его в цикле производится удаление самого старого файла. Цикл прекращается как только процент использования диска будет меньше максимального.


#!/bin/sh

dsk='/mnt/disk_1G' # target dir
dv='/dev/sdc1'  # checked device
max=20 #set max percent

prc=`df --output=source,pcent |grep $dv |awk '{print $2}'|tr -d '%'` # get usage percent
while [[ $prc -ge $max ]]
do
#    echo $prc more than $max
    file=`find $dsk -type f | xargs stat -c "%Y %n" | sort -n | head -1 | cut -d' ' -f2` # get very old file
#    echo $file
    rm -f $file # remove file
    prc=`df --output=source,pcent |grep $dv |awk '{print $2}'|tr -d '%'` #get usage percent again
done