Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # Colors
- RED="\e[0;91m"
- GREEN="\e[0;92m"
- YELLOW="\e[0;93m"
- NC="\e[0m"
- # CHANGE ME
- saveDir="/opt/games/steam/steamapps/compatdata/1369670/pfx/drive_c/users/steamuser/AppData/Local/MotorTown/Saved/SaveGames"
- backupDir="/data/backup/savegames/Motor Town"
- maxSaves=10
- dateString=$(date +"%Y-%m-%d_%H-%M")
- if [[ ! -d "$backupDir" ]]; then
- mkdir "$backupDir"
- if [[ ! -d "$backupDir" ]]; then
- echo "Error creating backup directory: $backupDir"
- exit 1
- fi
- fi
- cd "$saveDir" || exit 1
- for folder in Characters Worlds; do
- mkdir -p "${backupDir}/${folder}"
- done
- # Characters
- folder=Characters
- cd $folder
- echo "Backing up ${folder}..."
- saves=(*.sav)
- for save in "${saves[@]}"; do
- if [[ -f "$save" ]]; then
- #echo -e "${YELLOW}Checking hash:${NC} ${save}"
- save_hash=$(md5sum "$save" | cut -d' ' -f1)
- backup_file=$(ls "${backupDir}/${folder}/" | grep "${save}-" 2>/dev/null | tail -n1)
- backup="${backupDir}/${folder}/${backup_file}"
- backup_hash=""
- if [[ -n "$backup" ]]; then
- #echo -e "${YELLOW}Checking hash:${NC} $(basename "${backup}")"
- backup_hash=$(md5sum "$backup" | cut -d' ' -f1)
- fi
- #echo save: $save
- #echo backup: $backup
- #echo save_hash: $save_hash
- #echo backup_hash: $backup_hash
- if [[ "$backup_hash" == "$save_hash" ]]; then
- echo -e "${GREEN}$save matches latest backup, no backup needed${NC}"
- else
- cp "$save" "${backupDir}/${folder}/${save}-${dateString}"
- RET=$?
- if [[ $RET -eq 0 ]]; then
- echo -e "${YELLOW}Copied $save to ${backupDir}/${folder}/${save}-${dateString}${NC}"
- else
- echo -e "${RED}Error! cp returned $RET for $save${NC}"
- fi
- fi
- count=$(ls "${backupDir}/${folder}/" | grep -c "${save}-")
- if [[ $count -gt $maxSaves ]]; then
- let trim=($count - $maxSaves)
- if [[ $trim -gt 0 ]]; then
- echo "Cleaning up $trim old backups for $save"
- ls "${backupDir}/${folder}/" | grep "${save}-" | tail -n $trim | xargs -I SAVE rm "${backupDir}/${folder}/SAVE"
- fi
- fi
- fi
- done
- cd ..
- # Worlds
- folder=Worlds
- cd $folder
- echo "Backing up ${folder}..."
- worlds="$(ls -l | awk '/^d/ {print $NF}')"
- for world in "${worlds[@]}"; do
- mkdir -p "${backupDir}/Worlds/${world}"
- echo World: $world
- cd $world
- saves=(*.world)
- for save in "${saves[@]}"; do
- if [[ -f "$save" ]]; then
- #echo -e "${YELLOW}Checking hash:${NC} ${save}"
- save_hash=$(md5sum "$save" | cut -d' ' -f1)
- backup_file=$(ls "${backupDir}/${folder}/${world}/" | grep "${save}-" 2>/dev/null | tail -n1)
- backup="${backupDir}/${folder}/${world}/${backup_file}"
- backup_hash=""
- if [[ -n "$backup" ]]; then
- #echo -e "${YELLOW}Checking hash:${NC} $(basename "${backup}")"
- backup_hash=$(md5sum "$backup" | cut -d' ' -f1)
- fi
- #cho save: $save
- #echo backup: $backup
- #echo save_hash: $save_hash
- #echo backup_hash: $backup_hash
- if [[ "$backup_hash" == "$save_hash" ]]; then
- echo -e "${GREEN}$save matches latest backup, no backup needed${NC}"
- else
- cp "$save" "${backupDir}/${folder}/${world}/${save}-${dateString}"
- RET=$?
- if [[ $RET -eq 0 ]]; then
- echo -e "${YELLOW}Copied $save to ${backupDir}/${folder}/${world}/${save}-${dateString}${NC}"
- else
- echo -e "${RED}Error! cp returned $RET for $save${NC}"
- fi
- fi
- count=$(ls "${backupDir}/${folder}/${world}/" | grep -c "${save}-")
- if [[ $count -gt $maxSaves ]]; then
- let trim=($count - $maxSaves)
- if [[ $trim -gt 0 ]]; then
- echo "Cleaning up $trim old backups for $save"
- ls "${backupDir}/${folder}/${world}/" | grep "${save}-" | tail -n $trim | xargs -I SAVE rm "${backupDir}/${folder}/${world}/SAVE"
- fi
- fi
- fi
- done
- cd ..
- done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement