kerbo_

vintagestory_backup.sh

Feb 21st, 2025 (edited)
822
1
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.97 KB | None | 1 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="/home/USERNAME/.config/VintagestoryData/Saves"
  11. backupDir="/PATH/TO/BACKUP/LOCATION/Vintage Story"
  12. maxSaves=10
  13.  
  14. dateString=$(date +"%Y-%m-%d_%H-%M")
  15.  
  16. if [[ ! -d "$backupDir" ]]; then
  17.     mkdir "$backupDir"
  18.     if [[ ! -d "$backupDir" ]]; then
  19.         echo "Error creating backup directory: $backupDir"
  20.         exit 1
  21.     fi
  22. fi
  23.  
  24. cd "$saveDir" || exit 1
  25.  
  26. saves=(*.vcdbs)
  27.  
  28. for save in "${saves[@]}"; do
  29.     if [[ ! "$save" =~ "_auto" && -f "$save" ]]; then
  30.         save_size=$(ls -lh "$save" | awk '{print $5}')
  31.         echo -n "Checking hash: ${save} (${save_size})"
  32.         if [[ -f "${save}.md5sum" && ! "${save}" -nt "${save}.md5sum"  ]]; then
  33.             echo " -- Found md5sum file"
  34.             save_hash=$(cat "${save}.md5sum")
  35.         else
  36.             echo ""
  37.             save_hash=$(md5sum "$save" | cut -d' ' -f1)
  38.         fi
  39.         echo "${save_hash}" > "${save}.md5sum"
  40.  
  41.         backup_file=$(ls "${backupDir}" | grep "${save}-" 2>/dev/null | grep -v md5sum | tail -n1)
  42.         if [[ -n "$backup_file" ]]; then
  43.             backup="${backupDir}/${backup_file}"
  44.         else
  45.             backup=""
  46.         fi
  47.         backup_hash=""
  48.        
  49.         if [[ -n "$backup" ]]; then
  50.             save_size=$(ls -lh "$backup" | awk '{print $5}')
  51.             echo -n "Checking hash: $(basename "${backup}") ($save_size)"
  52.             if [[ -f "${backup}.md5sum" ]]; then
  53.                 echo " -- Found md5sum file"
  54.                 backup_hash=$(cat "${backup}.md5sum")
  55.             else
  56.                 echo ""
  57.                 backup_hash=$(md5sum "$backup" | cut -d' ' -f1)
  58.                 echo "$backup_hash" > "${backup}.md5sum"
  59.             fi
  60.         fi
  61.        
  62.         #echo save: $save
  63.         #echo backup: $backup
  64.         #echo save_hash: $save_hash
  65.         #echo backup_hash: $backup_hash
  66.        
  67.         if [[ "$backup_hash" == "$save_hash" ]]; then
  68.             echo -e "${GREEN}$save matches latest backup, no backup needed${NC}"
  69.         else
  70.             echo "Copying file..."
  71.             cp "$save" "${backupDir}/${save}-${dateString}"
  72.             RET=$?
  73.             if [[ $RET -eq 0 ]]; then
  74.                 echo -e "${YELLOW}Copied $save to ${backupDir}/${save}-${dateString}${NC}"
  75.                 echo "$save_hash" > "${backupDir}/${save}-${dateString}.md5sum"
  76.             else
  77.                 echo -e "${RED}Error! cp returned $RET for $save${NC}"
  78.             fi
  79.         fi
  80.  
  81.         count=$(ls "${backupDir}" | grep -c "${save}-" | grep -v md5sum)
  82.         if [[ $count -gt $maxSaves ]]; then
  83.             let trim=($count - $maxSaves)
  84.             if [[ $trim -gt 0 ]]; then
  85.                 echo "Cleaning up $trim old backups for $save"
  86.                 ls "${backupDir}" | grep "${save}-" | grep -v md5sum | head -n $trim | xargs -I SAVE /bin/rm -f "${backupDir}/SAVE" "${backupDir}/SAVE.md5sum"
  87.             fi
  88.         fi
  89.     fi
  90. done
  91.  
Advertisement
Add Comment
Please, Sign In to add comment