Linux Rsync 同步文件
你可以使用
rsync
命令来实现树莓派到云服务器的同步,包括删除和新增修改的文件。以下是详细的步骤和命令:
1. 基本同步命令
rsync -avz --delete /www/ user@云服务器IP:/www/
参数说明:
-a
: 归档模式,保持文件属性、权限等-v
: 详细输出-z
: 压缩传输--delete
: 删除目标端源端不存在的文件
2. 更安全的同步方式(推荐)
先进行试运行,确认要同步的文件:
# 试运行,不实际同步
rsync -avz --delete --dry-run /www/ user@云服务器IP:/www/
确认无误后,移除 --dry-run
进行实际同步:
# 实际同步
rsync -avz --delete /www/ user@云服务器IP:/www/
3. 增强的同步命令
rsync -avz --delete --progress --stats /www/ user@云服务器IP:/www/
额外参数:
--progress
: 显示传输进度--stats
: 显示传输统计信息
4. 排除不必要的文件
创建排除文件列表 exclude-list.txt
:
*.log
*.tmp
cache/
temp/
.DS_Store
.git/
然后使用排除列表:
rsync -avz --delete --exclude-from='exclude-list.txt' /www/ user@云服务器IP:/www/
5. 使用SSH密钥认证(推荐)
为了避免每次输入密码,设置SSH密钥认证:
# 在树莓派生成SSH密钥
ssh-keygen -t rsa
# 将公钥复制到云服务器
ssh-copy-id user@云服务器IP
6. 完整的部署脚本
创建脚本 deploy.sh
:
#!/bin/bash
# 配置变量
REMOTE_USER="用户名"
REMOTE_HOST="云服务器IP"
REMOTE_PATH="/www"
LOCAL_PATH="/www"
echo "开始同步到云服务器..."
echo "时间: $(date)"
# 试运行
echo "=== 试运行 ==="
rsync -avz --delete --dry-run --exclude-from='exclude-list.txt' "$LOCAL_PATH/" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH/"
read -p "确认同步?(y/n): " confirm
if [ "$confirm" != "y" ]; then
echo "同步取消"
exit 1
fi
# 实际同步
echo "=== 开始实际同步 ==="
rsync -avz --delete --progress --stats --exclude-from='exclude-list.txt' "$LOCAL_PATH/" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH/"
echo "同步完成"
echo "时间: $(date)"
给脚本执行权限:
chmod +x deploy.sh
7. 定时自动同步(可选)
如果需要定时同步,可以设置cron任务:
# 编辑cron任务
crontab -e
# 添加以下行,每天凌晨2点同步
0 2 * * * /usr/bin/rsync -avz --delete --exclude-from=/path/to/exclude-list.txt /www/ user@云服务器IP:/www/ >> /var/log/rsync.log 2>&1
8. 验证同步结果
同步完成后,可以验证文件是否一致:
# 在云服务器上检查文件
ssh user@云服务器IP "find /www -type f | wc -l"
# 与本地比较
find /www -type f | wc -l
注意事项:
- 首次同步:如果数据量很大,首次同步可能需要较长时间
- 权限问题:确保云服务器的目标目录有写入权限
- 网络稳定性:如果网络不稳定,可以考虑使用
--partial
参数支持断点续传 - 备份重要数据:同步前建议备份云服务器上的重要数据
这样的设置可以确保你的树莓派测试通过后,能够快速、安全地将代码同步到云服务器。