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="/home/USERNAME/.config/VintagestoryData/Saves"
- backupDir="/PATH/TO/BACKUP/LOCATION/Vintage Story"
- 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
- saves=(*.vcdbs)
- for save in "${saves[@]}"; do
- if [[ ! "$save" =~ "_auto" && -f "$save" ]]; then
- save_size=$(ls -lh "$save" | awk '{print $5}')
- echo -n "Checking hash: ${save} (${save_size})"
- if [[ -f "${save}.md5sum" && ! "${save}" -nt "${save}.md5sum" ]]; then
- echo " -- Found md5sum file"
- save_hash=$(cat "${save}.md5sum")
- else
- echo ""
- save_hash=$(md5sum "$save" | cut -d' ' -f1)
- fi
- echo "${save_hash}" > "${save}.md5sum"
- backup_file=$(ls "${backupDir}" | grep "${save}-" 2>/dev/null | grep -v md5sum | tail -n1)
- if [[ -n "$backup_file" ]]; then
- backup="${backupDir}/${backup_file}"
- else
- backup=""
- fi
- backup_hash=""
- if [[ -n "$backup" ]]; then
- save_size=$(ls -lh "$backup" | awk '{print $5}')
- echo -n "Checking hash: $(basename "${backup}") ($save_size)"
- if [[ -f "${backup}.md5sum" ]]; then
- echo " -- Found md5sum file"
- backup_hash=$(cat "${backup}.md5sum")
- else
- echo ""
- backup_hash=$(md5sum "$backup" | cut -d' ' -f1)
- echo "$backup_hash" > "${backup}.md5sum"
- fi
- 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
- echo "Copying file..."
- cp "$save" "${backupDir}/${save}-${dateString}"
- RET=$?
- if [[ $RET -eq 0 ]]; then
- echo -e "${YELLOW}Copied $save to ${backupDir}/${save}-${dateString}${NC}"
- echo "$save_hash" > "${backupDir}/${save}-${dateString}.md5sum"
- else
- echo -e "${RED}Error! cp returned $RET for $save${NC}"
- fi
- fi
- count=$(ls "${backupDir}" | grep -c "${save}-" | grep -v md5sum)
- if [[ $count -gt $maxSaves ]]; then
- let trim=($count - $maxSaves)
- if [[ $trim -gt 0 ]]; then
- echo "Cleaning up $trim old backups for $save"
- ls "${backupDir}" | grep "${save}-" | grep -v md5sum | head -n $trim | xargs -I SAVE /bin/rm -f "${backupDir}/SAVE" "${backupDir}/SAVE.md5sum"
- fi
- fi
- fi
- done
Advertisement
Add Comment
Please, Sign In to add comment