#!/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"