|
@@ -0,0 +1,62 @@
|
|
|
+
|
|
|
+set -euo pipefail
|
|
|
+DIRECTORY=$1
|
|
|
+LIMIT=10000000000
|
|
|
+ACTION=print
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+estimate(){
|
|
|
+ RECLAIM=$(find "$1" -type f -"$2" +"$3" -print0 | du -cb --files0-from=- | grep total | cut -d' ' -f1) || RECLAIM=0
|
|
|
+}
|
|
|
+
|
|
|
+cleanup(){
|
|
|
+ time="$1"
|
|
|
+ echo "Reclaiming $((RECLAIM/1000000)) MB of data older than $AGE ($time)..."
|
|
|
+ find "$DIRECTORY" -type f -"$time" +"$AGE" -"$ACTION"
|
|
|
+}
|
|
|
+
|
|
|
+search(){
|
|
|
+ upper="$3"
|
|
|
+ lower="$2"
|
|
|
+ time="$1"
|
|
|
+ AGE="$upper"
|
|
|
+ while (( upper - lower > 0)); do
|
|
|
+ echo "Finding files older than $AGE ($time)..."
|
|
|
+ estimate "$DIRECTORY" "$time" "$AGE"
|
|
|
+ echo "Could reclaim $((RECLAIM/1000000)) MB..."
|
|
|
+ if (( SIZE - RECLAIM > LIMIT ));
|
|
|
+ then
|
|
|
+ upper="$AGE"
|
|
|
+ AGE=$(((AGE + lower)/2))
|
|
|
+ if (( AGE == upper )); then break; fi
|
|
|
+ else
|
|
|
+ lower="$AGE"
|
|
|
+ AGE=$(((upper + AGE)/2))
|
|
|
+ if (( AGE == lower )); then break; fi
|
|
|
+ fi
|
|
|
+ sleep 0.5
|
|
|
+ done
|
|
|
+}
|
|
|
+
|
|
|
+SIZE=$(find "$DIRECTORY" -type f -print0 | du -cb --files0-from=- | grep total | cut -d' ' -f1)
|
|
|
+RECLAIM=0
|
|
|
+declare AGE
|
|
|
+echo "Size limit is : $((LIMIT/1000000)) MB"
|
|
|
+echo "Current size is : $((SIZE/1000000)) MB"
|
|
|
+
|
|
|
+if (( SIZE < LIMIT )); then exit 0; fi
|
|
|
+
|
|
|
+echo "Need to reclaim : $(( (SIZE - LIMIT)/1000000 )) MB"
|
|
|
+
|
|
|
+search mtime 30 365
|
|
|
+
|
|
|
+if (( AGE > 30 )); then cleanup mtime && exit 0; fi
|
|
|
+
|
|
|
+search mtime 1 30
|
|
|
+
|
|
|
+if (( AGE > 1 )); then cleanup mtime && exit 0; fi
|
|
|
+
|
|
|
+search cmin 1 $((60*24))
|
|
|
+
|
|
|
+cleanup cmin
|