summaryrefslogblamecommitdiff
path: root/tmw-cmp-update
blob: 2b92f10dc8a50c6c858ea136429112c8d2e903da (plain) (tree)






























                                                                                                                                                                          

                                                                                                                           














                                                              

                                                      




















                                                                            
#!/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/updates.tmw2.org/legacy/local")
LOCAL_DIR="$HOME/.local/share/mana/updates/updates.tmw2.org/legacy/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"
            else
                echo "Omitting $PATHNAME: Files match"
            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"