Skip to content

Instantly share code, notes, and snippets.

@szdytom
Created October 25, 2023 04:04
Show Gist options
  • Save szdytom/2271d98a7307a6a19b47795fa40e8351 to your computer and use it in GitHub Desktop.
Save szdytom/2271d98a7307a6a19b47795fa40e8351 to your computer and use it in GitHub Desktop.
Backup Minecraft Server
#!/bin/bash
# 获取当前时间戳
timestamp=$(date +%Y%m%d%H%M%S)
# 设置文件夹路径
folder_path="slot1"
# 设置备份文件名
backup_file="backup-${timestamp}.tar.xz"
# 使用tar命令打包文件夹
echo -n "Compressing slot1 to ${backup_file}..."
tar -cJf ${backup_file} ${folder_path} || { echo "Error: Failed to create backup file"; exit 1; }
echo "done"
# 分割压缩文件为小于1M的部分
echo -n "Spliting to smaller files..."
split -b 1M ${backup_file} ${backup_file}-part- || { echo "Error: Failed to split backup file"; exit 1; }
echo "done"
# 从文件中读取用户名和密码
# 设置webdav服务器的接入点
source credentials.txt
# 在服务器上新建一个文件夹
echo -n "Creating backup folder on the server..."
curl -X MKCOL -u ${username}:${password} ${webdav_url}/${timestamp} || { echo "Error: Failed to create directory on server"; exit 1; }
echo
# 使用curl命令上传分割后的文件到webdav服务器
for file in ${backup_file}-part-*; do
echo -n "Uploading ${file}..."
curl -T ${file} -u ${username}:${password} ${webdav_url}/${timestamp}/${file} || { echo "Error: Failed to upload ${file}"; exit 1; }
echo
done
# 删除本地的备份文件和分割后的文件
rm ${backup_file} ${backup_file}-part-* || { echo "Error: Failed to delete local backup files"; exit 1; }
echo "Sucessfully created and uploaded ${backup_file}"
webdav_url=http://example.com/dav
username=XXX
password=XXX
#!/bin/bash
# 获取当前时间戳
timestamp=$(date +%Y%m%d%H%M%S)
# 设置文件夹路径
folder_path="slot1"
# 设置备份文件名
backup_file="backup-${timestamp}.tar.xz"
# 使用tar命令打包文件夹
echo -n "Compressing slot1 to ${backup_file}..."
tar -cJf ${backup_file} ${folder_path} || { echo "Error: Failed to create backup file"; exit 1; }
echo "done"
# 分割压缩文件为小于1M的部分
echo -n "Spliting to smaller files..."
split -b 1M ${backup_file} ${backup_file}-part- || { echo "Error: Failed to split backup file"; exit 1; }
echo "done"
# 从文件中读取用户名和密码
# 设置webdav服务器的接入点
source credentials.txt
# 在服务器上新建一个文件夹
echo -n "Creating backup folder on the server..."
curl -X MKCOL -u ${username}:${password} ${webdav_url}/${timestamp} || { echo "Error: Failed to create directory on server"; exit 1; }
echo
# 使用curl命令上传分割后的文件到webdav服务器
for file in ${backup_file}-part-*; do
echo -n "Uploading ${file}..."
curl -T ${file} -u ${username}:${password} ${webdav_url}/${timestamp}/${file} || { echo "Error: Failed to upload ${file}"; exit 1; }
echo
done
# 删除本地的备份文件和分割后的文件
rm ${backup_file} ${backup_file}-part-* || { echo "Error: Failed to delete local backup files"; exit 1; }
echo "Sucessfully created and uploaded ${backup_file}"
fat@fat-mc:~/MCskyblock/qb_multi$ cat restore_from_cloud.sh
#!/bin/bash
# 从文件中读取用户名和密码
# 设置webdav服务器的接入点
source credentials.txt || { echo "Error: Failed to source credentials"; exit 1; }
# 使用curl命令获取webdav服务器上的所有备份文件夹
backup_folders=$(curl -s -X PROPFIND -u ${username}:${password} ${webdav_url} | grep -oPm1 "(?<=<D:href>)[^<]+" | grep '/$' | grep -v "dav/$")
# 将备份文件夹列表转换为数组
backup_folders=($backup_folders)
# 打印所有备份文件夹
echo "Available backups:"
for i in "${!backup_folders[@]}"; do
echo "$((i+1)): ${backup_folders[$i]##/dav/}"
done
# 让用户选择一个备份文件夹
read -p "Enter the number of the backup you want to restore: " choice
# 获取用户选择的备份文件夹
chosen_backup=${backup_folders[$((choice-1))]}
# 使用curl命令下载用户选择的备份文件
partfile_list=$(curl -s -X PROPFIND -u ${username}:${password} ${webdav_url}/${chosen_backup#/dav/} | grep -oPm1 "(?<=<D:href>)[^<]+" | grep -v '/$')
for file in $partfile_list; do
echo -n "Downloading file ${file##*/}..."
curl -O -J -L -u ${username}:${password} ${webdav_url}/${file##/dav/} || { echo "Error: Failed to download ${file}"; exit 1; }
echo "done"
done
# 将下载的备份文件合并
echo -n "Merging backup files..."
cat backup-* > backup.tar.xz || { echo "Error: Failed to merge backup files"; exit 1; }
echo "done"
# 解压备份文件到指定的文件夹
echo -n "Extracting backup..."
mkdir -p restored_backup
tar -xf backup.tar.xz -C restored_backup || { echo "Error: Failed to extract backup"; exit 1; }
echo "done"
if [ -d "slot3" ]; then
rm -r "slot3"
fi
mv restored_backup/slot1 slot3
# 删除下载的备份文件
echo -n "Cleaning up..."
rm -r restored_backup backup-* || { echo "Error: Failed to delete backup files"; exit 1; }
echo "done"
echo "Restored backup to slot3"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment