Advertisement
kerbo_

archean_backup.sh

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