Files
ansible/roles/ftp/files/deleteoldfiles.sh
2024-07-05 11:53:08 +02:00

118 lines
2.7 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 were at it
find "$MOUNT" -type d -empty -delete
echo