savegame_backup: rewrite to use symlinks
This commit is contained in:
parent
4d8dca3818
commit
395072d3cd
|
@ -1,48 +1,74 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# Simple two way game-save sync
|
# Create symbolic links from game save folders to documents folder
|
||||||
# NOTE: This will ALLWAYS replace the backups with local folders,
|
# Useful if you sync it with syncthing or something similar
|
||||||
# even if they are empty folders
|
|
||||||
|
|
||||||
command -v xdg-user-dir &> /dev/null &&
|
set -e
|
||||||
|
|
||||||
|
function clean() {
|
||||||
|
if test $? -ne 0; then
|
||||||
|
notify-send "Could not sync ${GAME_NAME}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
trap clean EXIT
|
||||||
|
|
||||||
|
command -v xdg-user-dir &>/dev/null &&
|
||||||
DOCUMETS="$(xdg-user-dir DOCUMENTS)" ||
|
DOCUMETS="$(xdg-user-dir DOCUMENTS)" ||
|
||||||
DOCUMETS=~/Documents
|
DOCUMETS=$HOME/Documents
|
||||||
|
|
||||||
SAVES_DIR="$DOCUMETS/GameSaves/"
|
SAVES_DIR="$DOCUMETS/GameSaves"
|
||||||
test -d "$SAVES_DIR" || exit 1
|
test -d "$SAVES_DIR" || exit 1
|
||||||
|
|
||||||
test_rsync(){
|
grep "^#include \.saves-ignore" "$DOCUMETS/.stignore" ||
|
||||||
test -d "$1" && {
|
echo "#include .saves-ignore" >"$DOCUMETS/.stignore"
|
||||||
mkdir -p $(dirname "$2")
|
rm "$DOCUMETS/.saves-ignore"
|
||||||
cp --recursive --no-target-directory --reflink=always "$1" "$2"
|
|
||||||
}
|
game_save() {
|
||||||
|
GAME_NAME="$1"
|
||||||
|
shift
|
||||||
|
INSTALL_DIR="$HOME/$1"
|
||||||
|
shift
|
||||||
|
|
||||||
|
BACKUP_DIR="$SAVES_DIR/$GAME_NAME"
|
||||||
|
|
||||||
|
mkdir -p "$BACKUP_DIR" "$(dirname '$INSTALL_DIR')"
|
||||||
|
|
||||||
|
if test -d "$INSTALL_DIR" -a ! -L "$INSTALL_DIR"; then
|
||||||
|
fd -H -d 1 . "$INSTALL_DIR" |
|
||||||
|
xargs -I{} mv "{}" "$BACKUP_DIR"
|
||||||
|
sync
|
||||||
|
rmdir "$INSTALL_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test ! -L "$INSTALL_DIR" -o ! -d "$INSTALL_DIR"; then
|
||||||
|
ln -sT "$BACKUP_DIR" "$INSTALL_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -n "$1"; then
|
||||||
|
printf "GameSaves/${GAME_NAME}/%s\n" $@ >>"$DOCUMETS/.saves-ignore"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
game_save(){
|
game_save mindustry \
|
||||||
GAME_NAME="$1"; shift
|
".local/share/Mindustry" 'previews'
|
||||||
INSTALL_DIR="${1/"~"/$HOME}/"; shift
|
game_save minecraft \
|
||||||
|
".minecraft/saves"
|
||||||
BACKUP_DIR="$SAVES_DIR/$GAME_NAME/"
|
game_save factorio \
|
||||||
|
".factorio" '_autosave*.zip' 'doc-html' 'temp' 'data' 'bin'
|
||||||
test_rsync "$INSTALL_DIR" "$BACKUP_DIR" ||
|
game_save cuphead \
|
||||||
test_rsync "$BACKUP_DIR" "$INSTALL_DIR" ||
|
"Games/cuphead/drive_c/users/$USER/Application Data/Cuphead"
|
||||||
echo "Nothing to do for $GAME_NAME"
|
game_save dusk \
|
||||||
|
"Games/dusk/game/saves"
|
||||||
while test -n "$1"
|
game_save ULTRAKILL-wine \
|
||||||
do
|
"Games/ultrakill/drive_c/Program Files/ULTRAKILL/Saves"
|
||||||
find "$BACKUP_DIR" -name "$1" -exec rm -rf {} +
|
game_save marioW \
|
||||||
shift
|
"Games/super-mario-world"
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
game_save mindustry "~/.local/share/Mindustry" 'previews'
|
|
||||||
game_save minecraft "~/.minecraft/saves"
|
|
||||||
game_save factorio "~/.factorio" '_autosave*.zip' '*.sync-conflict-*' 'doc-html' 'temp' 'data' 'bin'
|
|
||||||
game_save cuphead "~/Games/cuphead/drive_c/users/$USER/Application Data/Cuphead"
|
|
||||||
game_save dusk "~/Games/dusk/game/saves"
|
|
||||||
game_save marioW "~/Games/super-mario-world/"
|
|
||||||
|
|
||||||
game_save hl1 "~/Games/HalfLife2Source/game/hl1/save/"
|
|
||||||
game_save hl2 "~/Games/HalfLife2Source/game/hl2/save/"
|
|
||||||
game_save hl2ep1 "~/Games/HalfLife2Source/game/episodic/save/"
|
|
||||||
game_save hl2ep2 "~/Games/HalfLife2Source/game/ep2/save/"
|
|
||||||
|
|
||||||
|
game_save hl1 \
|
||||||
|
"Games/HalfLife2Source/game/hl1/save"
|
||||||
|
game_save hl2 \
|
||||||
|
"Games/HalfLife2Source/game/hl2/save"
|
||||||
|
game_save hl2ep1 \
|
||||||
|
"Games/HalfLife2Source/game/episodic/save"
|
||||||
|
game_save hl2ep2 \
|
||||||
|
"Games/HalfLife2Source/game/ep2/save"
|
||||||
|
|
Reference in New Issue