kerbo_

beamng_backup.sh

Jun 29th, 2026 (edited)
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.64 KB | None | 0 0
  1. #!/bin/bash
  2. #
  3. # Simple backup script for BeamNG.drive saves
  4. # Twitter: @Kerbo_
  5.  
  6. # Colors
  7. RED="\e[0;91m"
  8. GREEN="\e[0;92m"
  9. YELLOW="\e[0;93m"
  10. NC="\e[0m"
  11.  
  12. # CHANGE ME
  13. saveDir="${HOME}/.local/share/BeamNG/BeamNG.drive/current/settings/cloud/saves"
  14. backupDir="/data/backup/savegames/BeamNG.drive"
  15.  
  16. maxSaves=10
  17. dateString=$(date +"%Y-%m-%d_%H-%M")
  18.  
  19. function error()
  20. {
  21.     echo -e "${RED}Error:${NC} $@" 1>&2
  22. }
  23.  
  24. # Need zip and unzip
  25. if [[ -z "$(which zip 2>/dev/null)" ]]; then
  26.     error "zip not found"
  27.     exit 1
  28. fi
  29.  
  30. if [[ -z "$(which unzip 2>/dev/null)" ]]; then
  31.     error "unzip not found"
  32.     exit 1
  33. fi
  34.  
  35. if [[ ! -d "$backupDir" ]]; then
  36.     mkdir "$backupDir"
  37.     if [[ ! -d "$backupDir" ]]; then
  38.         echo "Error creating backup directory: $backupDir"
  39.         exit 1
  40.     fi
  41. fi
  42.  
  43. cd "$saveDir" || exit 1
  44.  
  45. saves=(*)
  46.  
  47. for save in "${saves[@]}"; do
  48.     if [[ -d "$save" && -f "${save}/career.log" ]]; then
  49.         save_hash=$(md5sum "$save/career.log" | cut -d' ' -f1)
  50.         backup_file=$(ls "${backupDir}" | grep "${save}-" 2>/dev/null | tail -n1)
  51.         if [[ -n "$backup_file" ]]; then
  52.             backup="${backupDir}/${backup_file}"
  53.         else
  54.             backup=""
  55.         fi
  56.         backup_hash=""
  57.        
  58.         if [[ -n "$backup" ]]; then
  59.             tempDir=$(mktemp -d)
  60.             if [[ -d "$tempDir" ]]; then
  61.                 unzip "$backup" -d $tempDir >/dev/null
  62.                 backup_hash=$(md5sum "${tempDir}/${save}/career.log" | cut -d' ' -f1)
  63.                 rm -rf "$tempDir"
  64.             fi
  65.         fi
  66.        
  67.         # echo save: $save
  68.         # echo backup: $backup
  69.         # echo save_hash: $save_hash
  70.         # echo backup_hash: $backup_hash
  71.        
  72.         if [[ "$backup_hash" == "$save_hash" ]]; then
  73.             echo -e "${GREEN}$save matches latest backup, no backup needed${NC}"
  74.         else
  75.             echo "zipping up ${save}..."
  76.             zip -r "${backupDir}/${save}-${dateString}.zip" "$save" >/dev/null
  77.             RET=$?
  78.             if [[ $RET -eq 0 ]]; then
  79.                 echo -e "${YELLOW}Zipped $save to ${backupDir}/${save}-${dateString}.zip${NC}"
  80.             else
  81.                 echo -e "${RED}Error! zip returned $RET for $save${NC}"
  82.             fi
  83.         fi
  84.  
  85.         count=$(ls "${backupDir}" | grep -c "${save}-")
  86.         if [[ $count -gt $maxSaves ]]; then
  87.             let trim=($count - $maxSaves)
  88.             if [[ $trim -gt 0 ]]; then
  89.                 echo "Cleaning up $trim old backups for $save"
  90.                 ls "${backupDir}" | grep "${save}-" | head -n $trim | xargs -I SAVE rm "${backupDir}/SAVE"
  91.             fi
  92.         fi
  93.     fi
  94. done
  95.  
Advertisement
Add Comment
Please, Sign In to add comment