diff options
Diffstat (limited to 'tmw-cmp-update')
-rwxr-xr-x | tmw-cmp-update | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/tmw-cmp-update b/tmw-cmp-update new file mode 100755 index 0000000..a141762 --- /dev/null +++ b/tmw-cmp-update @@ -0,0 +1,69 @@ +#!/bin/bash + + +###This script will update files from the M+ local directory only if the file exists in the TMW extracted directory. This prevents files from local from being written to +###TMW if it doesn't exist in TMW. cmp is used to compare files and overwrites the TMW file with the local one only if they differ. + +#Required apps check +REQUIRED_APPS='cmp sed sort' + for APP in $REQUIRED_APPS; do + REQ_APP_CHECK=$(find '/bin' '/usr/bin' -name "$APP") + if [[ "$REQ_APP_CHECK" == '' ]]; then + echo -e "$APP must be installed in order for tmw-cmp-update to work\nRequired Apps: $REQUIRED_APPS" >&2 + exit 0 + fi + done + +#Confirmation +while :; do + echo -e "This script will update files from the M+ local directory only if the file exists in the TMW extracted directory. This prevents files from local from being \ +written to TMW if it doesn't exist in TMW. cmp is used to compare files and overwrites the TMW file with the local one only if they differ." + read -p 'Do you wish to continue? (y/n)' ANS1 + case $ANS1 in + [Yy]* ) break;; + [Nn]* ) exit 0;; + * ) echo "Invalid response: Y/y(anything) for yes or N/n(anything) for no.";; + esac +done + +###Variables you may want to change### +#The (sub)directory where the TMW files extracted from TMW.zip reside. I prefer to make a backup of a directory and work from there. (Default "$HOME/Desktop/TMW") +TMW_DIR="$HOME/Desktop/TMW" +#The (sub)directory where local files are found. (Default: "$HOME/.local/share/mana/updates/themanaworld.github.io/tmwa-server-data/local") +LOCAL_DIR="$HOME/.local/share/mana/updates/themanaworld.github.io/tmwa-server-data/local" +#Log for files that exist in TMW, but not in local +MISSING_FROM_LOCAL="$HOME/Desktop/missing_from_local.txt" +#Log for files that exist in local, but not in TMW +MISSING_FROM_TMW="$HOME/Desktop/missing_from_tmw.txt" +### + +: > "$MISSING_FROM_LOCAL" +: > "$MISSING_FROM_TMW" + +for FILE in $(find "$TMW_DIR" -type f); do + PATHNAME=$(echo "$FILE" | sed "s,^$TMW_DIR/,,") + LOCAL_FILE=$(find "$LOCAL_DIR" -type f -path "*$PATHNAME") + if [[ "$LOCAL_FILE" != '' ]]; then + if [[ $(cmp "$FILE" "$LOCAL_FILE") != '' ]]; then + cp -fv "$LOCAL_FILE" "$FILE" + fi + elif [[ "$LOCAL_FILE" == '' ]]; then + #List files in tmw directory that are not in the local directory + echo "$PATHNAME" >> "$MISSING_FROM_LOCAL" + fi +done + +#List files in local directory that are not in the TMW directory +for FILE in $(find "$LOCAL_DIR" -type f); do + PATHNAME=$(echo "$FILE" | sed "s,^$LOCAL_DIR/,,") + TMW_FILE=$(find "$TMW_DIR" -type f -path "*$PATHNAME") + if [[ "$TMW_FILE" == '' ]]; then + echo "$PATHNAME" >> "$MISSING_FROM_TMW" + fi +done + +sort -n "$MISSING_FROM_LOCAL" > "$MISSING_FROM_LOCAL"'_tmp' +mv -f "$MISSING_FROM_LOCAL"'_tmp' "$MISSING_FROM_LOCAL" +sort -n "$MISSING_FROM_TMW" > "$MISSING_FROM_TMW"'_tmp' +mv -f "$MISSING_FROM_TMW"'_tmp' "$MISSING_FROM_TMW" + |