mirror of
https://github.com/RetroPie/RetroPie-Setup.git
synced 2025-04-02 10:51:41 -04:00
94 lines
2.6 KiB
Bash
94 lines
2.6 KiB
Bash
#!/bin/bash
|
|
# This file is part of The RetroPie Project
|
|
#
|
|
# The RetroPie Project is the legal property of its developers, whose names are
|
|
# too numerous to list here. Please refer to the COPYRIGHT.md file distributed with this source.
|
|
#
|
|
# See the LICENSE.md file at the top-level directory of this distribution and
|
|
# at https://raw.githubusercontent.com/RetroPie/RetroPie-Setup/master/LICENSE.md
|
|
#
|
|
|
|
## config / defaults
|
|
user="USER"
|
|
group="GROUP"
|
|
|
|
home="$(eval echo ~$user)"
|
|
rootdir="/opt/retropie"
|
|
retropie_path="$home/RetroPie"
|
|
|
|
usb_path="$UM_MOUNTPOINT/retropie"
|
|
usb_path_from_rp="$usb_path/configs/from_retropie"
|
|
usb_path_to_rp="$usb_path/configs/to_retropie"
|
|
|
|
declare -A path_mapping
|
|
|
|
# mapping from usb_path_to_rp/* to retropie location
|
|
path_mapping["configs"]="$rootdir/configs"
|
|
|
|
## internals
|
|
hook_name=${0##*/}
|
|
|
|
## functions
|
|
function log() {
|
|
logger -p user.$1 -t usbmount-"$hook_name"-[$$] -- "$2"
|
|
}
|
|
|
|
function log_cmd() {
|
|
local ret
|
|
local error
|
|
error="$("$@" 2>&1 >/dev/null)"
|
|
ret=$?
|
|
[[ "$ret" -ne 0 ]] && log err "$* - returned $ret - $error"
|
|
}
|
|
|
|
## some sanity checking
|
|
if [[ -z "$UM_MOUNTPOINT" ]]; then
|
|
log err "UM_MOUNTPOINT not set!"
|
|
exit 0
|
|
fi
|
|
|
|
if [[ ! -d "$UM_MOUNTPOINT" ]]; then
|
|
log err "UM_MOUNTPOINT is not a directory"
|
|
exit 0
|
|
fi
|
|
|
|
# make sure we have something to sync from
|
|
if [[ ! -d "$usb_path" ]]; then
|
|
exit 0
|
|
fi
|
|
|
|
# make folders for syncing
|
|
mkdir -p "$usb_path/"{roms,BIOS} "$usb_path_from_rp" "$usb_path_to_rp"
|
|
|
|
# mirror romdir structure to external drive
|
|
log info "Attempting to create directory structure for ROMS in '$usb_path/roms' ..."
|
|
# fetch list of romdirs from current installation and mirror onto external drive
|
|
find "$retropie_path/roms" -mindepth 1 -maxdepth 1 -type d -printf "$usb_path/roms/%f\n" | xargs mkdir -p 2>/dev/null || true
|
|
|
|
# copy ROMs/BIOS from USB stick to local SD card
|
|
for dir in roms BIOS; do
|
|
log info "Syncing $dir ..."
|
|
log_cmd rsync -rtu --exclude '._*' --max-delete=-1 "$usb_path/$dir" "$retropie_path/"
|
|
chown -R "$user":"$group" "$retropie_path/$dir"
|
|
done
|
|
|
|
log info "Syncing configs ..."
|
|
# copy configs to usb
|
|
for to in "${!path_mapping[@]}"; do
|
|
from=${path_mapping[$to]}
|
|
log_cmd rsync -rtu --exclude '._*' --max-delete=-1 "$from/" "$usb_path_from_rp/$to/"
|
|
done
|
|
|
|
# copy configs from usb
|
|
for from in $(find "$usb_path_to_rp/" -mindepth 1 -maxdepth 1); do
|
|
# basename
|
|
from_bn=${from##*/}
|
|
to=${path_mapping[$from_bn]}
|
|
if [[ -n "$to" ]]; then
|
|
log_cmd rsync -rtu --exclude '._*' --max-delete=-1 "$from/" "$to/"
|
|
chown -R "$user":"$group" "$to"
|
|
fi
|
|
done
|
|
|
|
# unmount USB stick
|
|
umount "$UM_MOUNTPOINT"
|