Merge branch 'master' of https://git.101010.fr/gardouille-dotfiles/scripts
This commit is contained in:
commit
4a19be55af
|
@ -1,5 +1,67 @@
|
||||||
# Save game management
|
# Save game management
|
||||||
|
|
||||||
|
Collection of scripts in order to move all (as much as i can) save of my
|
||||||
|
video games in one remote place (eg. Nextcloud directory,…). Then a symbolic
|
||||||
|
link should take place of the directories. This allows me to :
|
||||||
|
* Have save in the cloud for all games !
|
||||||
|
* Easily find my save in one place.
|
||||||
|
* Easily backup everything (one `tar` to backup them all).
|
||||||
|
* Synchronize save between Linux hosts.
|
||||||
|
* Restore save if anything happens to my game computer.
|
||||||
|
* Everything that Nextcloud allows me to do (access from anywhere, share,…).
|
||||||
|
|
||||||
|
## How-to use
|
||||||
|
|
||||||
|
Run the main script to automatically run the 3 others :
|
||||||
|
|
||||||
|
``` sh
|
||||||
|
~/repos/gardouille.scripts/games/save.game
|
||||||
|
```
|
||||||
|
|
||||||
|
This will run :
|
||||||
|
- **save.game.steam** : Try to move or symlink saves from 3 Steam's directories,
|
||||||
|
userdata, common and compatdata.
|
||||||
|
- **save.game.xdg** : Try to move or symlink save that respect the XDG
|
||||||
|
specifications (~/.config and ~/.local/share).
|
||||||
|
- **save.game.home** : Try to move or symlink other saves that the devs have
|
||||||
|
seen fit to place anywhere else…
|
||||||
|
|
||||||
|
## Currently managed games
|
||||||
|
|
||||||
|
* Borderlands 2 − https://pcgamingwiki.com/wiki/Borderlands_2
|
||||||
|
* Broforce − https://pcgamingwiki.com/wiki/Broforce
|
||||||
|
* Butcher − https://pcgamingwiki.com/wiki/Butcher
|
||||||
|
* Capsized − https://pcgamingwiki.com/wiki/Capsized
|
||||||
|
* Castle Crashers − https://pcgamingwiki.com/wiki/Castle_Crashers
|
||||||
|
* Crypt of the Necrodancer − https://pcgamingwiki.com/wiki/Crypt_of_the_Necrodancer
|
||||||
|
* Door Kickers: Action Squad − https://pcgamingwiki.com/wiki/Door_Kickers:_Action_Squad
|
||||||
|
* Duck Game − https://pcgamingwiki.com/wiki/Duck_Game
|
||||||
|
* Full Metal Furies − https://pcgamingwiki.com/wiki/Full_Metal_Furies
|
||||||
|
* HotlineMiami − https://pcgamingwiki.com/wiki/Hotline_Miami
|
||||||
|
* Jump Gunners − https://pcgamingwiki.com/wiki/Jump_Gunners
|
||||||
|
* Mercenary Kings − https://pcgamingwiki.com/wiki/Mercenary_Kings
|
||||||
|
* Metal Slug X − https://pcgamingwiki.com/wiki/Metal_Slug_X
|
||||||
|
* Never Alone − https://pcgamingwiki.com/wiki/Never_Alone
|
||||||
|
* Nuclear Throne − https://pcgamingwiki.com/wiki/Nuclear_Throne
|
||||||
|
* Overcooked! 2 − https://pcgamingwiki.com/wiki/Overcooked!_2
|
||||||
|
* PixelJunk Shooter − https://pcgamingwiki.com/wiki/PixelJunk_Shooter
|
||||||
|
* Portal 2 − https://pcgamingwiki.com/wiki/Portal_2 (solo only, multiplayer is on Steam cloud)
|
||||||
|
* Prey (2017) − https://pcgamingwiki.com/wiki/Prey_(2017) (don't work yet)
|
||||||
|
* Risk of Rain − https://pcgamingwiki.com/wiki/Risk_of_Rain
|
||||||
|
* Saints Row IV − https://pcgamingwiki.com/wiki/Saints_Row_IV
|
||||||
|
* Saints Row: The Third − https://pcgamingwiki.com/wiki/Saints_Row:_The_Third
|
||||||
|
* Shift Happens − https://pcgamingwiki.com/wiki/Shift_Happens (don't work yet)
|
||||||
|
* South Park: The Stick of Truth − https://pcgamingwiki.com/wiki/South_Park:_The_Stick_of_Truth
|
||||||
|
* Steam Screenshots − https://steamdb.info/app/760/
|
||||||
|
* The Dishwasher: Vampire Smile − https://pcgamingwiki.com/wiki/The_Dishwasher:_Vampire_Smile
|
||||||
|
* The Swapper − https://pcgamingwiki.com/wiki/The_Swapper
|
||||||
|
* TowerFall Ascension − https://pcgamingwiki.com/wiki/TowerFall_Ascension (not managed cause no substree, check $XDG_DATA_HOME)
|
||||||
|
* Tricky Towers − https://pcgamingwiki.com/wiki/Tricky_Towers
|
||||||
|
* Trine 2 Complete Story − https://pcgamingwiki.com/wiki/Trine_2
|
||||||
|
* Trine Enchanted Edition − https://pcgamingwiki.com/wiki/Trine_Enchanted_Edition
|
||||||
|
|
||||||
|
## How-to add new save
|
||||||
|
|
||||||
Sources of informations :
|
Sources of informations :
|
||||||
* Various informations (save path,…) : https://pcgamingwiki.com/wiki
|
* Various informations (save path,…) : https://pcgamingwiki.com/wiki
|
||||||
* Match steam id and game name : https://steamdb.info/
|
* Match steam id and game name : https://steamdb.info/
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Purpose {{{
|
||||||
|
## Run all other save.game.* scripts.
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
# Vars {{{
|
||||||
|
script_wd=$(dirname -- "${0}")
|
||||||
|
|
||||||
|
## List of scripts
|
||||||
|
home_script="save.game.home"
|
||||||
|
steam_script="save.game.steam"
|
||||||
|
xdg_script="save.game.xdg"
|
||||||
|
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
# For all scripts, try to run
|
||||||
|
for script in "${home_script}" "${steam_script}" "${xdg_script}"; do
|
||||||
|
|
||||||
|
## If the script doesn't exist
|
||||||
|
if [ ! -f "${script_wd}/${script}" ]; then
|
||||||
|
printf '\e[1;35m%-6s\e[m\n' "Loop script − ${script} doesn't seems to exist. Abort."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
## Run the script
|
||||||
|
sh "${script_wd}/${script}"
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
exit 0
|
|
@ -0,0 +1,130 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Purpose {{{
|
||||||
|
## Try to centralize all game's save that doesn't respect XDG specifications
|
||||||
|
## or Steam directories in order to :
|
||||||
|
## easily backup all save
|
||||||
|
## easily restore it
|
||||||
|
## be able to access it from anywhere
|
||||||
|
## … all you can do with a Nextcloud (share, versionning,…)
|
||||||
|
##
|
||||||
|
## 1. Move save directories of a list of known games from homedir (or subdir)
|
||||||
|
## to a remote directory (Nextcloud, remote mount,…).
|
||||||
|
## Then create a symlink in home directory to the remote game directory.
|
||||||
|
##
|
||||||
|
## 2. If a directory doesn't exist, check if a remote one is available
|
||||||
|
## and symlink it.
|
||||||
|
##
|
||||||
|
## KISS : Only manage save directories from home directory (or subdir).
|
||||||
|
## For other paths (Steam,…) check other scripts.
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
# Vars {{{
|
||||||
|
debug=0
|
||||||
|
|
||||||
|
## List of video games for homedir {{{
|
||||||
|
### Give the relative path from homedir.
|
||||||
|
### Separate each path with "%" to be able to manage white space, eg :
|
||||||
|
### .mygame%.first-subtree/save of GAMEX
|
||||||
|
### ^
|
||||||
|
### Overcooked! 2 − Team17 − https://pcgamingwiki.com/wiki/Overcooked!_2
|
||||||
|
### Trine Enchanted Edition − .frozenbyte − https://pcgamingwiki.com/wiki/Trine_Enchanted_Edition
|
||||||
|
### Trine 2 Complete Story − .frozenbyte − https://pcgamingwiki.com/wiki/Trine_2
|
||||||
|
games_list="Team17%.frozenbyte"
|
||||||
|
## }}}
|
||||||
|
|
||||||
|
remote_dir="${HOME}/Nextcloud/games/linux.sgl.script"
|
||||||
|
home_remote_dir="${remote_dir}/home"
|
||||||
|
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
# Functions {{{
|
||||||
|
# Move one save game dir {{{
|
||||||
|
move_game_dir() {
|
||||||
|
_game_name="${1}"
|
||||||
|
_game_dir="${2}"
|
||||||
|
_local_game_path="${HOME}/${_game_dir}/${_game_name}"
|
||||||
|
_remote_game_path="${home_remote_dir}/${_game_dir}/${_game_name}"
|
||||||
|
|
||||||
|
## If a remote directory doesn't already exists for this game
|
||||||
|
if [ ! -d "${_remote_game_path}" ]; then
|
||||||
|
### Ensure to create tree directories on remote storage
|
||||||
|
mkdir -p -- "$(dirname "${_remote_game_path}")"
|
||||||
|
### Move data to remote storage
|
||||||
|
mv -- "${_local_game_path}" "${_remote_game_path}"
|
||||||
|
[ "${debug}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG : Move game − The data of ${_game_name} − ${_local_game_path} moved to remote storage."
|
||||||
|
### Then ask to create a symbolic link to local storage
|
||||||
|
symlink_game_dir "${_game_name}" "${_game_dir}"
|
||||||
|
else
|
||||||
|
printf '\e[1;35m%-6s\e[m\n' "Move game − ${_game_name} already have data on remote storage : ${_remote_game_path}. Abort to avoid to override data."
|
||||||
|
exit 5
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
# }}}
|
||||||
|
# Symlink one save game dir from remote to local {{{
|
||||||
|
symlink_game_dir() {
|
||||||
|
_game_name="${1}"
|
||||||
|
_game_dir="${2}"
|
||||||
|
_local_game_path="${HOME}/${_game_dir}/${_game_name}"
|
||||||
|
_remote_game_path="${home_remote_dir}/${_game_dir}/${_game_name}"
|
||||||
|
|
||||||
|
if [ -d "${_remote_game_path}" ]; then
|
||||||
|
ln -s -- "${_remote_game_path}" "${_local_game_path}"
|
||||||
|
[ "${debug}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG : Symlink game — Symlink remote data of ${_game_name} to local storage."
|
||||||
|
else
|
||||||
|
[ "${debug}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG : Symlink game — ${_game_name} doesn't have remote data."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
# Tests {{{
|
||||||
|
|
||||||
|
## Ensure remote dir exist {{{
|
||||||
|
if [ ! -d "${remote_dir}" ]; then
|
||||||
|
printf '\e[1;35m%-6s\e[m\n' "The directory for save game doesn't exists : ${remote_dir}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
## }}}
|
||||||
|
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
[ "${debug}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG : Run save game script for Homedir."
|
||||||
|
|
||||||
|
# Manage save game from homedir {{{
|
||||||
|
## Set "%" as field separator
|
||||||
|
IFS="%"
|
||||||
|
for game_path in ${games_list}; do
|
||||||
|
local_game_path="${HOME}/${game_path}"
|
||||||
|
local_game_path_type="$(ls -ld "${local_game_path}" | sed 's/\(^.\).*/\1/')"
|
||||||
|
|
||||||
|
game_name="$(basename "${game_path}")"
|
||||||
|
game_dir="$(dirname "${game_path}")"
|
||||||
|
|
||||||
|
case ${local_game_path_type} in
|
||||||
|
## Data is already a symlink
|
||||||
|
"symbolic"|"l")
|
||||||
|
link_name="$(file "${local_game_path}" | sed 's;.* symbolic link to \(.*\);\1;')"
|
||||||
|
[ "${debug}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG : Homedir for loop — The data of ${game_path} are already symlinked to ${link_name} . Skip."
|
||||||
|
;;
|
||||||
|
## Data is still a directory
|
||||||
|
"directory"|"d")
|
||||||
|
move_game_dir "${game_name}" "${game_dir}"
|
||||||
|
;;
|
||||||
|
## Data doesn't exist
|
||||||
|
"cannot")
|
||||||
|
[ "${debug}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG : Homedir for loop — The data of ${game_path} − ${local_game_path} doesn't exist. Skip."
|
||||||
|
symlink_game_dir "${game_name}" "${game_dir}"
|
||||||
|
;;
|
||||||
|
## Data can't be managed
|
||||||
|
*)
|
||||||
|
printf '\e[1;35m%-6s\e[m\n' "Data of ${game_path} (Homedir) − ${local_game_path} are not managed. Type: ${local_game_path_type}. Abort"
|
||||||
|
exit 3
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
done
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
exit 0
|
|
@ -157,6 +157,8 @@ done
|
||||||
|
|
||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
|
[ "${debug}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG : Run save game script for Steam."
|
||||||
|
|
||||||
# Manage Steam userdata save game {{{
|
# Manage Steam userdata save game {{{
|
||||||
for game_id in ${steam_userdata_games}; do
|
for game_id in ${steam_userdata_games}; do
|
||||||
local_game_path="${HOME}/${steam_userdata}/${game_id}"
|
local_game_path="${HOME}/${steam_userdata}/${game_id}"
|
||||||
|
|
|
@ -15,8 +15,8 @@
|
||||||
## 2. If a directory doesn't exist, check if a remote one is
|
## 2. If a directory doesn't exist, check if a remote one is
|
||||||
## available and symlink it.
|
## available and symlink it.
|
||||||
##
|
##
|
||||||
## KISS : Only manage save directories from Steam userdata. For other
|
## KISS : Only manage save directories from XDG. For other paths (Steam, home,…)
|
||||||
## paths (Steam,…) check other scripts.
|
## check other scripts.
|
||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
# Vars {{{
|
# Vars {{{
|
||||||
|
@ -29,7 +29,7 @@ xdg_config="$(printf "%s" "${XDG_CONFIG_HOME}" | sed -e "s;${HOME}/;;")"
|
||||||
### List of video games for XDG CONFIG {{{
|
### List of video games for XDG CONFIG {{{
|
||||||
|
|
||||||
### Broforce − unity3d − https://pcgamingwiki.com/wiki/Broforce
|
### Broforce − unity3d − https://pcgamingwiki.com/wiki/Broforce
|
||||||
### Butcher − THD − https://pcgamingwiki.com/wiki/Butcher
|
### Butcher − unity3d − https://pcgamingwiki.com/wiki/Butcher
|
||||||
### Full Metal Furies − Cellar Door Games − https://pcgamingwiki.com/wiki/Full_Metal_Furies
|
### Full Metal Furies − Cellar Door Games − https://pcgamingwiki.com/wiki/Full_Metal_Furies
|
||||||
### Jump Gunners − unity3d − https://pcgamingwiki.com/wiki/Jump_Gunners
|
### Jump Gunners − unity3d − https://pcgamingwiki.com/wiki/Jump_Gunners
|
||||||
### Never Alone − unity3d − https://pcgamingwiki.com/wiki/Never_Alone
|
### Never Alone − unity3d − https://pcgamingwiki.com/wiki/Never_Alone
|
||||||
|
@ -38,8 +38,8 @@ xdg_config="$(printf "%s" "${XDG_CONFIG_HOME}" | sed -e "s;${HOME}/;;")"
|
||||||
### Overcooked! 2 − unity3d − https://pcgamingwiki.com/wiki/Overcooked!_2
|
### Overcooked! 2 − unity3d − https://pcgamingwiki.com/wiki/Overcooked!_2
|
||||||
### Risk of Rain − Risk_of_Rain − https://pcgamingwiki.com/wiki/Risk_of_Rain
|
### Risk of Rain − Risk_of_Rain − https://pcgamingwiki.com/wiki/Risk_of_Rain
|
||||||
### The Dishwasher: Vampire Smile − VampireSmile − https://pcgamingwiki.com/wiki/The_Dishwasher:_Vampire_Smile
|
### The Dishwasher: Vampire Smile − VampireSmile − https://pcgamingwiki.com/wiki/The_Dishwasher:_Vampire_Smile
|
||||||
### Tricky Towers − WeirdBeard − https://pcgamingwiki.com/wiki/Tricky_Towers
|
### Tricky Towers − unity3d − https://pcgamingwiki.com/wiki/Tricky_Towers
|
||||||
xdg_config_games="unity3d%THD%Cellar Door Games%nuclearthrone%Risk_of_Rain%VampireSmile%WeirdBeard"
|
xdg_config_games="unity3d%Cellar Door Games%nuclearthrone%Risk_of_Rain%VampireSmile"
|
||||||
### }}}
|
### }}}
|
||||||
|
|
||||||
## }}}
|
## }}}
|
||||||
|
@ -49,6 +49,7 @@ xdg_data="$(printf "%s" "${XDG_DATA_HOME}" | sed -e "s;${HOME}/;;")"
|
||||||
|
|
||||||
### List of video games for XDG DATA {{{
|
### List of video games for XDG DATA {{{
|
||||||
### Borderlands 2 − aspyr-media − https://pcgamingwiki.com/wiki/Borderlands_2
|
### Borderlands 2 − aspyr-media − https://pcgamingwiki.com/wiki/Borderlands_2
|
||||||
|
### Capsized − Capsized − https://pcgamingwiki.com/wiki/Capsized
|
||||||
### Full Metal Furies − Cellar Door Games − https://pcgamingwiki.com/wiki/Full_Metal_Furies
|
### Full Metal Furies − Cellar Door Games − https://pcgamingwiki.com/wiki/Full_Metal_Furies
|
||||||
### HotlineMiami − HotlineMiami − https://pcgamingwiki.com/wiki/Hotline_Miami
|
### HotlineMiami − HotlineMiami − https://pcgamingwiki.com/wiki/Hotline_Miami
|
||||||
### Mercenary Kings − Tribute Games − https://pcgamingwiki.com/wiki/Mercenary_Kings
|
### Mercenary Kings − Tribute Games − https://pcgamingwiki.com/wiki/Mercenary_Kings
|
||||||
|
@ -56,8 +57,9 @@ xdg_data="$(printf "%s" "${XDG_DATA_HOME}" | sed -e "s;${HOME}/;;")"
|
||||||
### Saints Row: The Third − vpltd − https://pcgamingwiki.com/wiki/Saints_Row:_The_Third
|
### Saints Row: The Third − vpltd − https://pcgamingwiki.com/wiki/Saints_Row:_The_Third
|
||||||
### Saints Row IV − vpltd − https://pcgamingwiki.com/wiki/Saints_Row_IV
|
### Saints Row IV − vpltd − https://pcgamingwiki.com/wiki/Saints_Row_IV
|
||||||
### The Dishwasher: Vampire Smile − VampireSmile − https://pcgamingwiki.com/wiki/The_Dishwasher:_Vampire_Smile
|
### The Dishwasher: Vampire Smile − VampireSmile − https://pcgamingwiki.com/wiki/The_Dishwasher:_Vampire_Smile
|
||||||
|
### The Swapper − Facepalm Games − https://pcgamingwiki.com/wiki/The_Swapper
|
||||||
### TowerFall Ascension − TowerFall − https://pcgamingwiki.com/wiki/TowerFall_Ascension
|
### TowerFall Ascension − TowerFall − https://pcgamingwiki.com/wiki/TowerFall_Ascension
|
||||||
data_games="aspyr-media%Cellar Door Games%HotlineMiami%Tribute Games%PJShooter%vpltd%VampireSmile%TowerFall"
|
xdg_data_games="aspyr-media%Capsized%Cellar Door Games%HotlineMiami%Tribute Games%PJShooter%vpltd%VampireSmile%Facepalm Games%TowerFall"
|
||||||
### }}}
|
### }}}
|
||||||
|
|
||||||
## }}}
|
## }}}
|
||||||
|
@ -133,19 +135,23 @@ done
|
||||||
|
|
||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
|
[ "${debug}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG : Run save game script for XDG."
|
||||||
|
|
||||||
# Manage XDG config save game {{{
|
# Manage XDG config save game {{{
|
||||||
|
## Set "%" as field separator
|
||||||
|
IFS="%"
|
||||||
for game_name in ${xdg_config_games}; do
|
for game_name in ${xdg_config_games}; do
|
||||||
local_game_path="${HOME}/${xdg_config}/${game_name}"
|
local_game_path="${HOME}/${xdg_config}/${game_name}"
|
||||||
local_game_path_type="$(ls -ld "${local_game_path}" | sed 's/\(^.\).*/\1/')"
|
local_game_path_type="$(ls -ld "${local_game_path}" | sed 's/\(^.\).*/\1/')"
|
||||||
|
|
||||||
case ${local_game_path_type} in
|
case ${local_game_path_type} in
|
||||||
## Data is already a symlink
|
## Data is already a symlink
|
||||||
"symbolic")
|
"symbolic"|"l")
|
||||||
link_name="$(file "${local_game_path}" | sed 's;.* symbolic link to \(.*\);\1;')"
|
link_name="$(file "${local_game_path}" | sed 's;.* symbolic link to \(.*\);\1;')"
|
||||||
[ "${debug}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG : XDG CONFIG for loop — The data of ${game_name} are already symlinked to ${link_name} . Skip."
|
[ "${debug}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG : XDG CONFIG for loop — The data of ${game_name} are already symlinked to ${link_name} . Skip."
|
||||||
;;
|
;;
|
||||||
## Data is still a directory
|
## Data is still a directory
|
||||||
"directory")
|
"directory"|"d")
|
||||||
move_game_dir "${game_name}" "${xdg_config}"
|
move_game_dir "${game_name}" "${xdg_config}"
|
||||||
;;
|
;;
|
||||||
## Data doesn't exist
|
## Data doesn't exist
|
||||||
|
@ -155,10 +161,43 @@ for game_name in ${xdg_config_games}; do
|
||||||
;;
|
;;
|
||||||
## Data can't be managed
|
## Data can't be managed
|
||||||
*)
|
*)
|
||||||
printf '\e[1;35m%-6s\e[m\n' "Data of ${game_name} (userdata) − ${local_game_path} are not managed. Type: ${local_game_path_type}. Abort"
|
printf '\e[1;35m%-6s\e[m\n' "Data of ${game_name} (XDG CONFIG) − ${local_game_path} are not managed. Type: ${local_game_path_type}. Abort"
|
||||||
exit 3
|
exit 3
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
done
|
done
|
||||||
# }}}
|
# }}}
|
||||||
|
# Manage XDG data save game {{{
|
||||||
|
## Set "%" as field separator
|
||||||
|
IFS="%"
|
||||||
|
for game_name in ${xdg_data_games}; do
|
||||||
|
local_game_path="${HOME}/${xdg_data}/${game_name}"
|
||||||
|
local_game_path_type="$(ls -ld "${local_game_path}" | sed 's/\(^.\).*/\1/')"
|
||||||
|
|
||||||
|
case ${local_game_path_type} in
|
||||||
|
## Data is already a symlink
|
||||||
|
"symbolic"|"l")
|
||||||
|
link_name="$(file "${local_game_path}" | sed 's;.* symbolic link to \(.*\);\1;')"
|
||||||
|
[ "${debug}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG : XDG DATA for loop — The data of ${game_name} are already symlinked to ${link_name} . Skip."
|
||||||
|
;;
|
||||||
|
## Data is still a directory
|
||||||
|
"directory"|"d")
|
||||||
|
move_game_dir "${game_name}" "${xdg_data}"
|
||||||
|
;;
|
||||||
|
## Data doesn't exist
|
||||||
|
"cannot")
|
||||||
|
[ "${debug}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG : XDG DATA for loop — The data of ${game_name} − ${local_game_path} doesn't exist. Skip."
|
||||||
|
symlink_game_dir "${game_name}" "${xdg_data}"
|
||||||
|
;;
|
||||||
|
## Data can't be managed
|
||||||
|
*)
|
||||||
|
printf '\e[1;35m%-6s\e[m\n' "Data of ${game_name} (XDG DATA) − ${local_game_path} are not managed. Type: ${local_game_path_type}. Abort"
|
||||||
|
exit 3
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
done
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
|
@ -17,6 +17,9 @@
|
||||||
│ ├── save0005.sav.bak
|
│ ├── save0005.sav.bak
|
||||||
│ ├── save0008.sav
|
│ ├── save0008.sav
|
||||||
│ └── save0008.sav.bak
|
│ └── save0008.sav.bak
|
||||||
|
├── Capsized
|
||||||
|
│ ├── Config.cfg
|
||||||
|
│ └── Logs
|
||||||
├── Cellar Door Games
|
├── Cellar Door Games
|
||||||
│ └── Full Metal Furies
|
│ └── Full Metal Furies
|
||||||
│ └── Saves
|
│ └── Saves
|
||||||
|
@ -24,6 +27,21 @@
|
||||||
│ ├── profileData1.brdat
|
│ ├── profileData1.brdat
|
||||||
│ ├── profileData1.brdat_BACKUP
|
│ ├── profileData1.brdat_BACKUP
|
||||||
│ └── TEMPprofileData1.brdat
|
│ └── TEMPprofileData1.brdat
|
||||||
|
├── Facepalm Games
|
||||||
|
│ └── The Swapper 1000
|
||||||
|
│ ├── CommonSettings.ini
|
||||||
|
│ ├── CommonSettings.pro
|
||||||
|
│ ├── CommonSettings.pro.old
|
||||||
|
│ ├── controller_mappings_user.txt
|
||||||
|
│ ├── darker.ini
|
||||||
|
│ ├── darker.ini.old
|
||||||
|
│ ├── darker.pro
|
||||||
|
│ ├── darker.pro.old
|
||||||
|
│ ├── Default.ini
|
||||||
|
│ ├── gardouill.ini
|
||||||
|
│ ├── gardouill.pro
|
||||||
|
│ ├── gardouill.pro.old
|
||||||
|
│ └── TrueEngineLog.txt
|
||||||
├── HotlineMiami
|
├── HotlineMiami
|
||||||
│ ├── debug.log
|
│ ├── debug.log
|
||||||
│ ├── hotline.cfg
|
│ ├── hotline.cfg
|
||||||
|
|
Loading…
Reference in New Issue