只要你管着三台以上服务器,肯定有那个时刻——敲下 rsync,停顿,问自己:是 -a 还是 -r?要不要 --delete?尾巴上那个斜杠要不要? 单是那个尾斜杠就引发了比大家愿意承认的更多故障。
1. 同步并排除典型项
clai
$ clai rsync 当前目录到 staging:/srv/app/,排除 node_modules 和 .git→ rsync -avz --delete --exclude='node_modules' --exclude='.git' \ ./ staging:/srv/app/
./ 后面那个斜杠很关键。CliAI 给得对。注意 --delete 被加了进来,因为「同步」意味着目标要镜像源——但这是按 Enter 之前值得再确认一次的标志。
2. SSH 带本地端口转发
clai
$ clai 通过 ssh 连接 prod-db,把本地 5432 转发到它的 postgres→ ssh -L 5432:localhost:5432 prod-db
转发语法(-L 本地:远程主机:远程端口)属于那种用一年一周一次才能内化的东西。
3. SCP 整个目录
clai
$ clai 从 staging:/srv/reports 把 reports 目录整体 scp 到 ./reports→ scp -r staging:/srv/reports ./reports
-r 对目录是必须的;不加 scp 会静悄悄什么也不做。CliAI 知道,你不必记。
4. 保留权限和时间戳
clai
$ clai 从 prod 把 /etc/nginx 拷过来,保留权限和时间戳→ rsync -avz --rsync-path='sudo rsync' prod:/etc/nginx/ ./nginx-backup/
--rsync-path='sudo rsync' 是那种「源端要 root 读取,但 ssh 走的是普通用户」的正确写法。难记,但容易问。
顺带提醒:认证
CliAI 生成命令;不替你配 SSH 密钥或主机。如果 ssh staging 在你终端不通,生成的命令也不会通。一次性把 ~/.ssh/config 和 ssh-agent 配好,这些一行流就永远赚回来了。