aBER0724 commited on
Commit
c243525
·
verified ·
1 Parent(s): dc22790

Update sync_data.sh

Browse files
Files changed (1) hide show
  1. 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 --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/")
 
 
 
 
 
 
 
 
 
 
 
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
- BACKUP_LIST=$(echo "$RAW_RESPONSE" | grep -o 'mcp_backup_[0-9]*_[0-9]*\.tar\.gz' | sort -r)
 
43
 
44
- echo "调试: 使用原始正则表达式找到 $(echo "$BACKUP_LIST" | grep -c mcp_backup 2>/dev/null || echo 0) 个文件"
45
- if [ -n "$BACKUP_LIST" ]; then
46
- echo "找到以下备份文件:"
47
- echo "$BACKUP_LIST" | head -5 | while read file; do echo " - $file"; done
48
- if [ $(echo "$BACKUP_LIST" | wc -l) -gt 5 ]; then
49
- echo " ... 等共 $(echo "$BACKUP_LIST" | wc -l) 个文件"
50
- fi
51
- fi
 
 
 
 
 
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"