#!/bin/bash # UpYun 部署脚本 - 使用 upx 官方工具 # 功能:增量同步本地文件到 UpYun,自动删除远程多余文件 # # 用法: ./deploy_upyun.sh <本地目录> <远程目录> [线程数] # 示例: ./deploy_upyun.sh ./public / 10 # # 环境变量: # UPYUN_SERVICE - 服务名 (bucket) # UPYUN_OPERATOR - 操作员 # UPYUN_PASSWORD - 密码 set -e START_TIME=$(date +%s) # 参数 LOCAL_DIR="${1:-./public}" REMOTE_DIR="${2:-/}" THREADS="${3:-10}" # 检查环境变量 SERVICE_NAME="${UPYUN_SERVICE:-}" OPERATOR="${UPYUN_OPERATOR:-}" PASSWORD="${UPYUN_PASSWORD:-}" if [ -z "$SERVICE_NAME" ] || [ -z "$OPERATOR" ] || [ -z "$PASSWORD" ]; then echo "❌ 错误:缺少必要的环境变量" echo "需要设置:" echo " UPYUN_SERVICE - 服务名 (bucket)" echo " UPYUN_OPERATOR - 操作员" echo " UPYUN_PASSWORD - 密码" exit 1 fi echo "🚀 UpYun 部署开始" echo "==========================================" echo "📦 服务名: $SERVICE_NAME" echo "👤 操作员: $OPERATOR" echo "📁 本地目录: $LOCAL_DIR" echo "☁️ 远程目录: $REMOTE_DIR" echo "🔢 线程数: $THREADS" echo "==========================================" # 使用独立的 upx 路径,避免和系统的 upx (Ultimate Packer) 冲突 UPX_VERSION="0.4.9" UPX_URL="https://collection.b0.upaiyun.com/softwares/upx/upx_${UPX_VERSION}_linux_amd64.tar.gz" UPX_BIN="/tmp/upyun-upx" # 检查系统中的 upx 是否是又拍云的 if command -v upx &> /dev/null; then UPX_VERSION_OUTPUT=$(upx --version 2>/dev/null || true) if echo "$UPX_VERSION_OUTPUT" | grep -q "upyun"; then echo "✅ 系统已安装又拍云 upx: $UPX_VERSION_OUTPUT" UPX_BIN="upx" else echo "⚠️ 系统中的 upx 不是又拍云工具(是压缩工具),将下载又拍云版" UPX_BIN="/tmp/upyun-upx" fi fi # 如果还没有又拍云 upx,下载它 if [ ! -x "$UPX_BIN" ]; then echo "" echo "📥 下载又拍云 upx v${UPX_VERSION}..." curl -sL "$UPX_URL" -o /tmp/upx.tar.gz if [ ! -f /tmp/upx.tar.gz ]; then echo "❌ 下载失败" exit 1 fi tar -xzf /tmp/upx.tar.gz -C /tmp mv /tmp/upx "$UPX_BIN" chmod +x "$UPX_BIN" rm -f /tmp/upx.tar.gz echo "✅ 又拍云 upx 安装完成" fi echo "" echo "🔄 开始同步..." echo "" # 使用 upx sync 进行增量同步 # --delete: 删除远程端不存在的文件 # --thread: 并发线程数 # --overwrite: 覆盖已存在的文件 # --skip: 跳过相同的文件(基于 MD5) "$UPX_BIN" sync "$LOCAL_DIR" "$REMOTE_DIR" \ --delete \ --thread "$THREADS" \ --overwrite \ --skip \ --service "$SERVICE_NAME" \ --operator "$OPERATOR" \ --password "$PASSWORD" \ --verbose END_TIME=$(date +%s) DURATION=$((END_TIME - START_TIME)) MINUTES=$((DURATION / 60)) SECONDS=$((DURATION % 60)) echo "" echo "==========================================" echo "✅ UpYun 部署完成!" echo "⏱️ 总耗时: ${MINUTES}分${SECONDS}秒" echo "=========================================="