Created
October 25, 2023 04:04
-
-
Save szdytom/2271d98a7307a6a19b47795fa40e8351 to your computer and use it in GitHub Desktop.
Backup Minecraft Server
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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}" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
webdav_url=http://example.com/dav | |
username=XXX | |
password=XXX |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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