Add Scripts/mc-backup.sh
This commit is contained in:
parent
7ecf2f65bd
commit
e77cb9afce
|
@ -0,0 +1,87 @@
|
|||
#!/bin/usr/env bash
|
||||
|
||||
set -eou pipefail
|
||||
#set -x
|
||||
|
||||
# The script creates backups of all save files in ~/.minecraft.
|
||||
# Backups older than 1 day will be deleted except for the most recent one.
|
||||
# Log files in ~/.minecraft that are older than 1 hour and larger than 1 GB will be deleted.
|
||||
|
||||
# Script assumes you have one save which is called "New World" (See line 41).
|
||||
|
||||
##################################################
|
||||
|
||||
## Write Log File
|
||||
|
||||
# Set directory for the log file
|
||||
mkdir -p "/home/$user/.minecraft/logs"
|
||||
log="/home/$user/.minecraft/logs/$(date +%Y-%m-%d_%H:%M).log"
|
||||
|
||||
# Redirect standard streams to the log file
|
||||
exec >> >(tee -i "${log}")
|
||||
exec 2>&1
|
||||
|
||||
##################################################
|
||||
|
||||
## Create Backup
|
||||
|
||||
# Change to directory
|
||||
cd "/home/$user/.minecraft"
|
||||
|
||||
# Check if Minecraft is running (not the launcher)
|
||||
if pgrep -f "minecraft.*java" > /dev/null; then
|
||||
|
||||
# Determine variable for current date
|
||||
today=$(date +%Y-%m-%d_%H:%M)
|
||||
|
||||
# Create directory with date
|
||||
mkdir -p "./backup/${today}"
|
||||
|
||||
# Copy save file to new directory
|
||||
cp -r "./saves/New World/" "./backup/${today}"
|
||||
|
||||
echo "Backup ${today} created."
|
||||
fi
|
||||
|
||||
##################################################
|
||||
|
||||
## Delete Old Backups
|
||||
|
||||
cd "/home/$user/.minecraft/backup"
|
||||
|
||||
# Loop through all directories
|
||||
for dir in *; do
|
||||
|
||||
# Check if variable is a directory
|
||||
if [[ -d ${dir} ]]; then
|
||||
|
||||
# Extract the date from the directory name
|
||||
dir_day=$(echo ${dir} | cut -d '_' -f1)
|
||||
|
||||
# Determine the most recent directory
|
||||
dir_recent=$(ls -d ${dir_day}* | sort | tail -n 1)
|
||||
|
||||
# Delete all directories except for the most recent one
|
||||
if [[ ${dir} != ${dir_recent} ]]; then
|
||||
|
||||
# Check if directory is older than 1 day
|
||||
find ${dir} -maxdepth 0 -type d -mtime +1 -exec echo "Backup {} deleted." \; -exec rm -rf {} +
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
##################################################
|
||||
|
||||
## Delete Old Logs
|
||||
|
||||
# Check if Minecraft and the launcher are not running
|
||||
if ! pgrep -f "minecraft" > /dev/null; then
|
||||
|
||||
# Delete official logs that are larger than 1 GB and older than 1 hour
|
||||
find "/home/$user/.minecraft/" -name 'launcher_log*' -size +1G -mmin +60 -exec rm {} +
|
||||
|
||||
# Delete logs from this script that are empty or older than 30 days
|
||||
find "/home/$user/.minecraft/logs" -type f -mtime +30 -exec rm {} +
|
||||
find "/home/$user/.minecraft/logs" -type f -empty -delete
|
||||
|
||||
fi
|
Loading…
Reference in New Issue