Download sync.sh from lin7zhi/2api: direct link, hf CLI and curl.
- Browser
- Download file 2.88 kB
-
https://huggingface.co/spaces/lin7zhi/2api/resolve/main/sync.sh
- Command line
-
hf download hf://spaces/lin7zhi/2api/sync.sh
-
curl -L -o sync.sh https://huggingface.co/spaces/lin7zhi/2api/resolve/main/sync.sh
2.88 kB
| # ================= 配置区域 ================= | |
| # 1. WebDAV URL 处理 | |
| WEBDAV_URL=${WEBDAV_URL%/} | |
| WEBDAV_BACKUP_PATH=${WEBDAV_BACKUP_PATH:-""} | |
| WEBDAV_BACKUP_PATH=${WEBDAV_BACKUP_PATH#/} | |
| WEBDAV_BACKUP_PATH=${WEBDAV_BACKUP_PATH%/} | |
| if [ -n "$WEBDAV_BACKUP_PATH" ]; then | |
| FULL_WEBDAV_URL="${WEBDAV_URL}/${WEBDAV_BACKUP_PATH}" | |
| else | |
| FULL_WEBDAV_URL="${WEBDAV_URL}" | |
| fi | |
| # 2. 同步间隔 (默认 10 分钟 = 600 秒) | |
| SYNC_INTERVAL=${SYNC_INTERVAL:-600} | |
| # 3. 文件名配置 | |
| BACKUP_NAME="gcli2api_creds.tar.gz" | |
| TEMP_FILE="/tmp/$BACKUP_NAME" | |
| TARGET_DIR="creds" | |
| # =========================================== | |
| log() { echo "[Backup] [$(date '+%H:%M:%S')] $1"; } | |
| # 检查环境 | |
| if [[ -z "$WEBDAV_URL" ]]; then | |
| log "未设置 WEBDAV_URL,跳过备份功能" | |
| exit 0 | |
| fi | |
| # 确保目标目录存在 | |
| mkdir -p "$TARGET_DIR" | |
| # === 功能1: 恢复备份 === | |
| restore() { | |
| log "正在检查远程备份..." | |
| REMOTE_FILE="$FULL_WEBDAV_URL/$BACKUP_NAME" | |
| # 下载到临时文件 | |
| HTTP_CODE=$(curl -s -o "$TEMP_FILE" -w "%{http_code}" -u "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$REMOTE_FILE") | |
| if [[ "$HTTP_CODE" == "200" ]]; then | |
| if [ -s "$TEMP_FILE" ]; then | |
| log "发现备份,正在恢复到 $TARGET_DIR..." | |
| # 解压覆盖 | |
| tar -xzf "$TEMP_FILE" | |
| log "✅ 恢复完成" | |
| else | |
| log "❌ 下载文件为空,跳过" | |
| fi | |
| else | |
| log "📭 未找到远程备份 (HTTP $HTTP_CODE),使用新环境启动" | |
| fi | |
| } | |
| # === 功能2: 循环备份 === | |
| loop() { | |
| log "启动定时备份 (间隔: ${SYNC_INTERVAL}秒)" | |
| # 尝试创建远程子目录 | |
| if [ -n "$WEBDAV_BACKUP_PATH" ]; then | |
| curl -s -o /dev/null -u "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" -X MKCOL "$FULL_WEBDAV_URL/" | |
| fi | |
| while true; do | |
| sleep $SYNC_INTERVAL | |
| # 检查 creds 目录是否有文件 | |
| if [ "$(ls -A $TARGET_DIR)" ]; then | |
| # 打包 creds 目录 | |
| # 排除 config.toml 如果你不想备份它,但通常需要备份 | |
| tar -czf "$TEMP_FILE" "$TARGET_DIR" | |
| FILE_SIZE=$(wc -c < "$TEMP_FILE") | |
| log "正在上传备份 (大小: $FILE_SIZE bytes)..." | |
| HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" -u "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" -T "$TEMP_FILE" "$FULL_WEBDAV_URL/$BACKUP_NAME") | |
| if [[ "$HTTP_CODE" == "201" ]] || [[ "$HTTP_CODE" == "204" ]] || [[ "$HTTP_CODE" == "200" ]]; then | |
| log "备份成功" | |
| else | |
| log "备份失败 (HTTP $HTTP_CODE)" | |
| fi | |
| else | |
| log "⚠️ $TARGET_DIR 目录为空,跳过备份" | |
| fi | |
| done | |
| } | |
| # === 入口 === | |
| case "$1" in | |
| "restore") restore ;; | |
| "loop") loop ;; | |
| *) restore; loop ;; | |
| esac |