#!/bin/bash
# Purge old backups and invalid backups (for which VE has been deleted)
# Consider VE 0 as Hardware Node

# List all backup files for an ID
backups_files_for_id() {
	echo ls |ftpbackup-connect |awk '$9~"^vzdump-openvz-'$1'-"{print $9}'
}

remove_files() {
	local F
	for F in $@; do
		echo "rm $F"
	done |ftpbackup-connect
}

# Delete all backups of an ID
delete_backups_for_id() {
	local F
	B="$(backups_files_for_id $1)"
	echo " * removing: "$B
	remove_files $B
}

# Delete all backups for which VE has been deleted
purge_backups_with_no_ve() {
	local ID
	echo "Removing backups for which VE has been deleted"
	for ID in $(echo ls |ftpbackup-connect |awk '$9~"^vzdump-openvz-"{print substr($9,15)}' |grep -o '^[0-9]*' |sort -u); do
		[ ! -z "$((echo 0; vzids -a) |grep '^'$ID'$')" ] && continue
		delete_backups_for_id $ID
	done
	echo "Done."
}

# Delete old N backups
purge_old_backups() {
	local ID N
	N=${1:-2}
	echo "Removing old backups, only keep last $N backups"
	for ID in 0 $(vzids -a); do
		F="$(backups_files_for_id $ID |head -n -$[$N*2])"
		[ -z "$F" ] && continue
		echo " * purge $ID: "$F
		remove_files $F
	done
	echo "Done."
}

purge_backups_with_no_ve
purge_old_backups 2
echo "FTP space used: $(ftpbackup-du)"
