Автоочистка директории по кол-ву файлов и квоте
Очищает директорию от устарелых файлов, если указанный лимит количества файлов превышен. Также рекурсивно удаляет файлы, если места согласно указанной квоте осталось в 3 раза меньше, чем последний сохраненный файл в этой директории. Если это единственный файл, то выходит не удаляя.
x3 сделано из предположения, что размер следующего файла не будет на много больше предыдущего.
Можно доработать, чтоб переменные принимались как параметры скрипта, но в моем случае это не требуется. Кому понадобится, тот доделает. Это не сложно.
Этот скрипт создавался для создания автоматических бэкапов. Следить за квотами и старыми резервными копиями нет никакого желания и времени.
Актуально для Debian 7, 8
P.S. Если это можно автоматизировать, то это нужно автоматизировать.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
#!/bin/bash
#######################################################
# #
# control_limits.sh #
# Author: Skey #
# allmails.oth@gmail.com #
# 2015-11-18 #
# #
# Autoclean directories by limits #
#######################################################
HOME_DIR=`eval echo ~$USER`
TARGET_DIR="$HOME_DIR/load/"
LIMIT_FILES=7
LIMIT_QUOTA=$((1024*1024*1024*6)) #6Gb
if [ ! -d "$TARGET_DIR" ]; then
if mkdir -p "$TARGET_DIR"; then
echo "Created directory: $TARGET_DIR"
else
echo "Cannot create directory: $TARGET_DIR"
exit 1
fi
fi
control_limit_files() {
if [ ! -n "$1" ]; then
echo "Warning: Target directory is undefined"
return 1
fi
if [ ! -n "$2" ]; then
echo "Warning: Max files is undefined"
return 1
fi
local counter=`ls "$1" | wc -l`
local cnt
if [ $counter -gt $2 ]; then # >
echo "Warning: Limit count file is exceeded"
cnt=0
for file in `ls -t "$1"`
do
((cnt++))
if [ $cnt -gt $2 ]; then # >
rm -r $1$file
echo "Removed $1$file"
fi
done
fi
return 0
}
control_limit_quota() {
if [ ! -n "$1" ]; then
echo "Warning: Target directory is undefined"
return 1
fi
if [ ! -n "$2" ]; then
echo "Warning: Quota is undefined"
return 1
fi
local size_files=`du -sb "$1" | cut -f1`
if [ $size_files -gt $2 ]; then # >
echo "Warning: Quota is exceeded ($size_files > $2)"
if [ `ls "$1" | wc -l` -eq 1 ]; then
echo "Don't remove last file"
return 1
fi
local first_file=`ls -t $1 | tail -n1`
rm -r $1$first_file
echo "Removed $1$first_file"
control_limit_quota $1 $2
else
local last_file=`ls -t $1 | head -n1`
local size_last=`du -b $1$last_file | cut -f1`
if [ $(($size_last*3)) -gt $2 ]; then
echo "Warning: Not enough space ($(($size_last*3)) > $2)"
if [ `ls "$1" | wc -l` -eq 1 ]; then
echo "Don't remove last file"
return 1
fi
local first_file=`ls -t $1 | tail -n1`
rm -r $1$first_file
echo "Removed $1$first_file"
control_limit_quota $1 $2
fi
fi
return 0
}
control_limit_files $TARGET_DIR $LIMIT_FILES
control_limit_quota $TARGET_DIR $LIMIT_QUOTA
if [ $? -ne 0 ]; then
echo "Error quota"
exit 1
fi
echo "Success"Раздел
Календарь
-
Сегодня
17 Марта 2026, ВторникПН ВТ СР ЧТ ПТ СБ ВС 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31