---
name: remote-sync
description: 将本地项目目录通过 rsync 增量同步到远端服务器 39.100.114.100:/data。自动排除 node_modules/.git 等文件。需通过 `/remote-sync` 显式调用。本技能为项目级，仅对 /home/zdh/projects 目录下的文件生效。
trigger: manual
---

# 项目部署技能

## 使用说明

通过 `/remote-sync` 调用，将本地目录增量同步到远端服务器。本技能仅在 `/home/zdh/projects` 目录下可用。

## 远端目标

- 服务器: `39.100.114.100`
- 用户: `root`
- 密码: `QQmm3721`
- 远端路径: `/data/projects`

## 操作流程

1. **确认本地目录**：询问用户要上传的本地目录路径。如果用户未指定，默认使用当前工作目录。
2. **确认远端子目录**：询问文件上传到 `/data` 下的哪个子目录。用户可直接回车表示上传到 `/data` 根下，也可指定子路径（如 `my-project` 则目标为 `/data/my-project`）。
3. **执行同步**：使用 `rsync` 通过 SSH 增量同步。
4. **输出结果**：显示同步完成的文件数量和远端路径。

## 同步命令

```bash
sshpass -p 'QQmm3721' rsync -avz --delete \
  --exclude 'node_modules' \
  --exclude '.git' \
  --exclude '.next' \
  --exclude '.nuxt' \
  --exclude '.cache' \
  --exclude 'dist' \
  --exclude '*.log' \
  --exclude '.env' \
  --exclude '.env.*' \
  --exclude 'coverage' \
  --exclude '.DS_Store' \
  --exclude 'Thumbs.db' \
  -e "ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10" \
  <本地目录>/ \
  root@39.100.114.100:/data/<远端子目录>/
```

**说明**：
- `--delete`：远端删除本地已不存在的文件，保持镜像一致
- `-avz`：归档模式 + 显示详情 + 压缩传输
- `StrictHostKeyChecking=no`：避免首次连接交互确认
- 末尾 `/` 不可省略，表示同步目录内容而非目录本身

## 依赖检查

首次执行前检查 `sshpass` 是否已安装：

```bash
which sshpass
```

如未安装，提示用户执行：

```bash
sudo apt install -y sshpass    # Debian/Ubuntu
# 或
sudo yum install -y sshpass    # CentOS/RHEL
```

## 无 sshpass 降级方案

若无法安装 sshpass，退回到交互式 SSH 密钥认证：

1. 提示用户执行 `ssh-copy-id root@39.100.114.100` 配置免密登录
2. 或使用 `rsync` 不带 sshpass，让用户手动输入密码
