Spaces:
Running
Running
Update sync_data.sh
Browse files- sync_data.sh +35 -12
sync_data.sh
CHANGED
|
@@ -26,8 +26,19 @@ restore_from_webdav() {
|
|
| 26 |
# 获取WebDAV上所有备份文件列表
|
| 27 |
echo "获取 WebDAV 备份文件列表..."
|
| 28 |
|
| 29 |
-
#
|
| 30 |
-
RAW_RESPONSE=$(curl -s
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 31 |
|
| 32 |
# 显示调试信息
|
| 33 |
echo "调试: WebDAV 响应长度 $(echo "$RAW_RESPONSE" | wc -c) 字符"
|
|
@@ -38,17 +49,23 @@ restore_from_webdav() {
|
|
| 38 |
echo "$RAW_RESPONSE" | grep -i mcp_backup || echo " (未找到包含 mcp_backup 的行)"
|
| 39 |
echo ""
|
| 40 |
|
| 41 |
-
#
|
| 42 |
-
|
|
|
|
| 43 |
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 52 |
|
| 53 |
if [ -z "$BACKUP_LIST" ]; then
|
| 54 |
echo "未找到任何备份文件"
|
|
@@ -57,6 +74,12 @@ restore_from_webdav() {
|
|
| 57 |
return 1
|
| 58 |
fi
|
| 59 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 60 |
# 尝试下载最新的备份文件
|
| 61 |
LATEST_BACKUP=$(echo "$BACKUP_LIST" | head -1)
|
| 62 |
echo "尝试下载最新备份: $LATEST_BACKUP"
|
|
|
|
| 26 |
# 获取WebDAV上所有备份文件列表
|
| 27 |
echo "获取 WebDAV 备份文件列表..."
|
| 28 |
|
| 29 |
+
# 尝试使用PROPFIND方法获取目录列表(WebDAV标准方法)
|
| 30 |
+
RAW_RESPONSE=$(curl -s -X PROPFIND \
|
| 31 |
+
--user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" \
|
| 32 |
+
-H "Depth: 1" \
|
| 33 |
+
-H "Content-Type: text/xml" \
|
| 34 |
+
-d '<?xml version="1.0" encoding="utf-8"?><propfind xmlns="DAV:"><prop><displayname/></prop></propfind>' \
|
| 35 |
+
"$WEBDAV_URL/")
|
| 36 |
+
|
| 37 |
+
# 如果PROPFIND失败,尝试简单的GET请求
|
| 38 |
+
if [ -z "$RAW_RESPONSE" ] || echo "$RAW_RESPONSE" | grep -q "Method Not Allowed"; then
|
| 39 |
+
echo "调试: PROPFIND 方法失败,尝试 GET 方法..."
|
| 40 |
+
RAW_RESPONSE=$(curl -s --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/")
|
| 41 |
+
fi
|
| 42 |
|
| 43 |
# 显示调试信息
|
| 44 |
echo "调试: WebDAV 响应长度 $(echo "$RAW_RESPONSE" | wc -c) 字符"
|
|
|
|
| 49 |
echo "$RAW_RESPONSE" | grep -i mcp_backup || echo " (未找到包含 mcp_backup 的行)"
|
| 50 |
echo ""
|
| 51 |
|
| 52 |
+
# 多种匹配方式
|
| 53 |
+
# 方式1: 从XML响应中提取文件名
|
| 54 |
+
BACKUP_LIST1=$(echo "$RAW_RESPONSE" | grep -oE '<D:displayname[^>]*>[^<]*mcp_backup_[0-9]+_[0-9]+\.tar\.gz[^<]*</D:displayname>' | sed 's/<[^>]*>//g')
|
| 55 |
|
| 56 |
+
# 方式2: 从href属性中提取
|
| 57 |
+
BACKUP_LIST2=$(echo "$RAW_RESPONSE" | grep -oE 'href="[^"]*mcp_backup_[0-9]+_[0-9]+\.tar\.gz[^"]*"' | sed 's/.*href="[^"]*\///g' | sed 's/".*//g')
|
| 58 |
+
|
| 59 |
+
# 方式3: 简单文本匹配
|
| 60 |
+
BACKUP_LIST3=$(echo "$RAW_RESPONSE" | grep -oE 'mcp_backup_[0-9]+_[0-9]+\.tar\.gz')
|
| 61 |
+
|
| 62 |
+
# 合并所有结果
|
| 63 |
+
BACKUP_LIST=$(printf "%s\n%s\n%s\n" "$BACKUP_LIST1" "$BACKUP_LIST2" "$BACKUP_LIST3" | grep -v '^$' | sort -u | sort -r)
|
| 64 |
+
|
| 65 |
+
echo "调试: 方式1(XML)找到 $(echo "$BACKUP_LIST1" | grep -c mcp_backup 2>/dev/null || echo 0) 个文件"
|
| 66 |
+
echo "调试: 方式2(href)找到 $(echo "$BACKUP_LIST2" | grep -c mcp_backup 2>/dev/null || echo 0) 个文件"
|
| 67 |
+
echo "调试: 方式3(文本)找到 $(echo "$BACKUP_LIST3" | grep -c mcp_backup 2>/dev/null || echo 0) 个文件"
|
| 68 |
+
echo "调试: 合并后总共 $(echo "$BACKUP_LIST" | grep -c mcp_backup 2>/dev/null || echo 0) 个文件"
|
| 69 |
|
| 70 |
if [ -z "$BACKUP_LIST" ]; then
|
| 71 |
echo "未找到任何备份文件"
|
|
|
|
| 74 |
return 1
|
| 75 |
fi
|
| 76 |
|
| 77 |
+
echo "找到以下备份文件:"
|
| 78 |
+
echo "$BACKUP_LIST" | head -5 | while read file; do echo " - $file"; done
|
| 79 |
+
if [ $(echo "$BACKUP_LIST" | wc -l) -gt 5 ]; then
|
| 80 |
+
echo " ... 等共 $(echo "$BACKUP_LIST" | wc -l) 个文件"
|
| 81 |
+
fi
|
| 82 |
+
|
| 83 |
# 尝试下载最新的备份文件
|
| 84 |
LATEST_BACKUP=$(echo "$BACKUP_LIST" | head -1)
|
| 85 |
echo "尝试下载最新备份: $LATEST_BACKUP"
|