diff --git a/misc/host-backup.sh b/misc/host-backup.sh index 0fbe9a41..5722e1f0 100644 --- a/misc/host-backup.sh +++ b/misc/host-backup.sh @@ -6,8 +6,8 @@ # https://github.com/tteck/Proxmox/raw/main/LICENSE function header_info { - clear -cat <<"EOF" + clear + cat <<"EOF" __ __ __ ___ __ / // /__ ___ / /_ / _ )___ _____/ /____ _____ / _ / _ \(_-&1 1>&2 2>&3) -while read -r dir; do - DIRNAME=$(basename "$dir") - OFFSET=2 - if [[ $((${#DIRNAME} + $OFFSET)) -gt ${MSG_MAX_LENGTH:-} ]]; then - MSG_MAX_LENGTH=$((${#DIRNAME} + $OFFSET)) + if [ -z "$BACKUP_PATH" ]; then + BACKUP_PATH="/root/" + else + BACKUP_PATH="$BACKUP_PATH" fi - CTID_MENU+=("$DIRNAME" "$dir " "OFF") -done < <(ls -d /etc/*) -while [ -z "${HOST_BACKUP:+x}" ]; do - HOST_BACKUP=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SELECTIONS" --checklist \ - "\nSelect what files/directories to backup:\n" \ - 16 $(($MSG_MAX_LENGTH + 58)) 6 \ - "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit + DIR=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "\nDefaults to etc\ne.g. root, var/lib/pve-cluster etc." 9 68 --title "Directory to work in (No leading or trailing slashes):" 3>&1 1>&2 2>&3) - for selected_dir in ${HOST_BACKUP//\"}; do - selected_directories+=("/etc/$selected_dir") + if [ -z "$DIR" ]; then + DIR="etc" + else + DIR="$DIR" + fi + + DIR_DASH=$(echo "$DIR" | tr '/' '-') + BACKUP_FILE="$(hostname)-${DIR_DASH}-backup" + selected_directories=() + + while read -r dir; do + DIRNAME=$(basename "$dir") + OFFSET=2 + if [[ $((${#DIRNAME} + $OFFSET)) -gt ${MSG_MAX_LENGTH:-} ]]; then + MSG_MAX_LENGTH=$((${#DIRNAME} + $OFFSET)) + fi + CTID_MENU+=("$DIRNAME" "$dir " "OFF") + done < <(ls -d /${DIR}/*) + + while [ -z "${HOST_BACKUP:+x}" ]; do + HOST_BACKUP=$(whiptail --backtitle "Proxmox VE Host Backup" --title "Working in the ${DIR} directory " --checklist \ + "\nSelect what files/directories to backup:\n" \ + 16 $(($MSG_MAX_LENGTH + 58)) 6 \ + "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit + + for selected_dir in ${HOST_BACKUP//\"/}; do + selected_directories+=("/${DIR}/$selected_dir") + done done -done -selected_directories_string=$(printf "%s " "${selected_directories[@]}") -header_info -echo -e "This will create backups for the directories \e[1;33m ${selected_directories_string% } \e[0m" -read -p "Press ENTER to continue..." -header_info -tar -czf $BACKUP_PATH$BACKUP_FILE-$(date +%Y_%m_%d).tar.gz --absolute-names ${selected_directories_string% } + selected_directories_string=$(printf "%s " "${selected_directories[@]}") + header_info + echo -e "This will create a backup in\e[1;33m $BACKUP_PATH \e[0mfor these files and directories\e[1;33m ${selected_directories_string% } \e[0m" + read -p "Press ENTER to continue..." + header_info + tar -czf "$BACKUP_PATH$BACKUP_FILE-$(date +%Y_%m_%d).tar.gz" --absolute-names ${selected_directories_string% } -echo -e "\nFinished" + echo -e "\nFinished" +} + +if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "Proxmox VE Host Backup" --yesno "This will create backups for particular files and directories located within a designated directory. Proceed?" 10 88); then + start +fi echo -e "\e[1;33m \nA backup is rendered ineffective when it remains stored on the host.\n \e[0m"