Advertisement
kerbo_

x4_backup.sh

Feb 14th, 2025
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.88 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="/home/kerbo/.config/EgoSoft/X4/8456522/save"
  11. backupDir="/data/backup/savegames/X4"
  12.  
  13. maxSaves=10
  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=(save_*.xml.gz)
  27.  
  28. for save in "${saves[@]}"; do
  29.     if [[ -f "$save" ]]; then
  30.         save_hash=$(md5sum "$save" | cut -d' ' -f1)
  31.         backup_file=$(ls "${backupDir}" | grep "${save}-" 2>/dev/null | tail -n1)
  32.         backup="${backupDir}/${backup_file}"
  33.         backup_hash=""
  34.        
  35.         if [[ -n "$backup" ]]; then
  36.             backup_hash=$(md5sum "$backup" | cut -d' ' -f1)        
  37.         fi
  38.        
  39.         #echo save: $save
  40.         #echo backup: $backup
  41.         #echo save_hash: $save_hash
  42.         #echo backup_hash: $backup_hash
  43.        
  44.         if [[ "$backup_hash" == "$save_hash" ]]; then
  45.             echo -e "${GREEN}$save matches latest backup, no backup needed${NC}"
  46.         else
  47.             cp "$save" "${backupDir}/${save}-${dateString}"
  48.             RET=$?
  49.             if [[ $RET -eq 0 ]]; then
  50.                 echo -e "${YELLOW}Copied $save to ${backupDir}/${save}-${dateString}${NC}"
  51.             else
  52.                 echo -e "${RED}Error! cp returned $RET for $save${NC}"
  53.             fi
  54.         fi
  55.  
  56.         count=$(ls "${backupDir}" | grep -c "${save}-")
  57.         if [[ $count -gt $maxSaves ]]; then
  58.             let trim=($count - $maxSaves)
  59.             if [[ $trim -gt 0 ]]; then
  60.                 echo "Cleaning up $trim old backups for $save"
  61.                 ls "${backupDir}" | grep "${save}-" | tail -n $trim | xargs -I SAVE rm "${backupDir}/SAVE"
  62.             fi
  63.         fi
  64.     fi
  65. done
  66.  
  67.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement