#!/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