zefie icon

osupack.sh

zefie | PRO | 05/18/18 09:55:59 AM UTC | 0 ⭐ | 800 👁️ | Never ⏰ | []
Bash |

1.45 KB

|

None

|

0 👍

/

0 👎

#!/bin/bash
IFS=$'\n'
OSUROOT="/mnt/f/Games/osu!"
DESTROOT="/mnt/z/Backups/Games/osu"
 
function packArchive() {
    Z_ACT="${1}"
    Z_FILE="${2}"
    shift 2
    "7za" "${Z_ACT}" -scrcCRC32 -stl -tzip -mx=9 -mtc=off -mcu=on "${Z_FILE}" "${@}" 2>/dev/null > /dev/null
    if [ $? -ne 0 ] && [ "${1}" == "u" ]; then
        echo "Update failed, re-creating..."
        rm -rf "${2}"
        echo "Creating $(echo ${2} | rev | cut -d'/' -f1 | rev)"
        packArchive "a" "${2}" "${3}"
    fi
}
 
 
function packSkins() {
    cd "${OSUROOT}/Skins"
    if [ ! -d "${DESTROOT}/Skins" ]; then
        mkdir "${DESTROOT}/Skins";
    fi
    for f in $(ls -1); do
        case "${f}" in
            "User")
                continue
                ;;
        esac
        if [ -d "${f}" ]; then
            NEWDIR="${OSUROOT}/Skins/${f}"
            cd -- "${NEWDIR}"
            OUTFILE=$(echo "${f}" | sed 's/%/\_/g;s/[+]/ /g;s/[|]/\_/g')
            FULLOUT="${DESTROOT}/Skins/${OUTFILE}.osk"
            if [ -f "${FULLOUT}" ]; then
                VERB="Updating"
                Z7ACT="u"
            else
                VERB="Creating"
                Z7ACT="a"
            fi
            echo "${VERB} ${OUTFILE}.osk"
            packArchive "${Z7ACT}" "${FULLOUT}" "."
            cd ..
        fi
    done
}
 
function packData() {
    cd "${OSUROOT}/Data"
    if [ ! -d "${DESTROOT}/Data" ]; then
        mkdir "${DESTROOT}/Data";
    fi
    for f in $(ls -1); do
        case "${f}" in
            "SubmissionCache")
                continue
                ;;
        esac
        if [ -d "${f}" ]; then
            NEWDIR="${OSUROOT}/Data/${f}"
            cd -- "${NEWDIR}"
            OUTFILE=$(echo "${f}" | sed 's/%/\_/g;s/[+]/ /g;s/[|]/\_/g')
            FULLOUT="${DESTROOT}/Data/${OUTFILE}.zip"
            if [ -f "${FULLOUT}" ]; then
                VERB="Updating"
                Z7ACT="u"
            else
                VERB="Creating"
                Z7ACT="a"
            fi
            echo "${VERB} ${OUTFILE}.zip"
            packArchive "${Z7ACT}" "${FULLOUT}" "."
            cd ..
        fi
    done
}
 
function packClient() {
    cd "${OSUROOT}"
    if [ ! -d "${DESTROOT}" ]; then
        mkdir "${DESTROOT}";
    fi
    NEWPACK=()
    for f in $(ls -1); do
        case "${f}" in
            "Data"|"Logs"|"Skins"|"Songs"|"sync.ffs_db")
                continue
                ;;
        esac
        NEWPACK+=("${f}")
    done
 
    NEWDIR="${OSUROOT}"
    cd -- "${NEWDIR}"
    OUTFILE="client"
    FULLOUT="${DESTROOT}/${OUTFILE}.zip"
    if [ -f "${FULLOUT}" ]; then
        VERB="Updating"
        Z7ACT="u"
    else
        VERB="Creating"
        Z7ACT="a"
    fi
    echo "${VERB} ${OUTFILE}.zip"
    packArchive "${Z7ACT}" "${FULLOUT}" "${NEWPACK[@]}"
    cd ..
}
 
 
function packSongs() {
    cd "${OSUROOT}/Songs"
    if [ ! -d "${DESTROOT}/Songs" ]; then
        mkdir "${DESTROOT}/Songs";
    fi
    for f in $(ls -1); do
        case "${f}" in
            "altimitmine - Twitch Friends Appreciation Song")
            continue
            ;;
        esac
        if [ -d "${f}" ]; then
            NEWDIR="${OSUROOT}/Songs/${f}"
            cd -- "${NEWDIR}"
            OUTFILE=$(echo "${f}" | sed 's/%/\_/g;s/[+]/ /g;s/[|]/\_/g')
            FULLOUT="${DESTROOT}/Songs/${OUTFILE}.osz"
            if [ -f "${FULLOUT}" ]; then
                VERB="Updating"
                Z7ACT="u"
            else
                VERB="Creating"
                Z7ACT="a"
            fi
            echo "${VERB} ${OUTFILE}.osz"
            packArchive "${Z7ACT}" "${FULLOUT}" "."
            cd ..
        fi
    done
}
 
if [ -z "${OSUEMBED}" ]; then
    if [ "$1" == "client" ]; then
        packClient;
    elif [ "$1" == "skins" ]; then
        packSkins;
    elif [ "$1" == "songs" ]; then
        packSongs;
    elif [ "$1" == "data" ]; then
        packData;
    elif [ "$1" == "all" ]; then
        packClient;
        packSkins;
        packSongs;
        packData;
    else
        echo "Usage: $0 [client|skins|songs|data|all]";
        exit 1;
    fi
fi

Comments