118 lines
2.7 KiB
Bash
118 lines
2.7 KiB
Bash
#!/bin/bash
|
||
#
|
||
###############################################################################
|
||
# Author : Louwrentius
|
||
# Contact : louwrentius@gmail.com
|
||
# Initial release : August 2011
|
||
# Licence : Simplified BSD License
|
||
###############################################################################
|
||
|
||
VERSION=1.01
|
||
|
||
#
|
||
# Mounted volume to be monitored.
|
||
#
|
||
MOUNT="$1"
|
||
#
|
||
# Maximum threshold of volume used as an integer that represents a percentage:
|
||
# 95 = 95%.
|
||
#
|
||
MAX_USAGE="$2"
|
||
#
|
||
# Failsafe mechansim. Delete a maxium of MAX_CYCLES files, raise an error after
|
||
# that. Prevents possible runaway script. Disable by choosing a high value.
|
||
#
|
||
MAX_CYCLES=100
|
||
|
||
|
||
show_header () {
|
||
echo
|
||
echo DELETE OLD FILES $VERSION
|
||
echo
|
||
}
|
||
|
||
show_header
|
||
|
||
reset () {
|
||
CYCLES=0
|
||
OLDEST_FILE=""
|
||
OLDEST_DATE=0
|
||
ARCH=`uname`
|
||
}
|
||
|
||
reset
|
||
|
||
if [ -z "$MOUNT" ] || [ ! -e "$MOUNT" ] || [ ! -d "$MOUNT" ] || [ -z "$MAX_USAGE" ]
|
||
then
|
||
echo "Usage: $0 <mountpoint> <threshold>"
|
||
echo "Where threshold is a percentage."
|
||
echo
|
||
echo "Example: $0 /storage 90"
|
||
echo "If disk usage of /storage exceeds 90% the oldest"
|
||
echo "file(s) will be deleted until usage is below 90%."
|
||
echo
|
||
echo "Wrong command line arguments or another error:"
|
||
echo
|
||
echo "- Directory not provided as argument or"
|
||
echo "- Directory does not exist or"
|
||
echo "- Argument is not a directory or"
|
||
echo "- no/wrong percentage supplied as argument."
|
||
echo
|
||
exit 1
|
||
fi
|
||
|
||
check_capacity () {
|
||
|
||
USAGE=`df -h | grep "$MOUNT" | awk '{ print $5 }' | sed s/%//g`
|
||
if [ ! "$?" == "0" ]
|
||
then
|
||
echo "Error: mountpoint $MOUNT not found in df output."
|
||
exit 1
|
||
fi
|
||
|
||
if [ -z "$USAGE" ]
|
||
then
|
||
echo "Didn't get usage information of $MOUNT"
|
||
echo "Mountpoint does not exist or please remove trailing slash."
|
||
exit 1
|
||
fi
|
||
|
||
if [ "$USAGE" -gt "$MAX_USAGE" ]
|
||
then
|
||
echo "Usage of $USAGE% exceeded limit of $MAX_USAGE percent."
|
||
return 0
|
||
else
|
||
echo "Usage of $USAGE% is within limit of $MAX_USAGE percent."
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
process_file () {
|
||
FILE="$1"
|
||
|
||
#
|
||
# Replace the following commands with wathever you want to do with
|
||
# this file. You can delete files but also move files or do something else.
|
||
#
|
||
echo "Deleting oldest file $FILE"
|
||
rm -f "$FILE"
|
||
}
|
||
|
||
while check_capacity
|
||
do
|
||
if [ "$CYCLES" -gt "$MAX_CYCLES" ]
|
||
then
|
||
echo "Error: after $MAX_CYCLES deleted files still not enough free space."
|
||
exit 1
|
||
fi
|
||
|
||
FILE=`find "$MOUNT" -type f -printf '%T+ %p\n' | sort | head -n 1 | cut -d ' ' -f 2`
|
||
|
||
process_file "$FILE"
|
||
|
||
((CYCLES++))
|
||
done
|
||
# Delete empty directories while we’re at it
|
||
find "$MOUNT" -type d -empty -delete
|
||
echo
|