用 rsync 同步本地和服务器之间的文件
rsync 是 Linux / macOS 上最常用的文件同步工具,可以把 本地文件同步到远程服务器,也可以同步服务器文件到本地,速度快且支持断点续传。它属于 rsync。
下面是最常见的用法。
一、同步命令
把本地目录同步到服务器:
rsync -avz ./local_dir/ user@server:/path/to/remote_dir/
示例:
rsync -avz ./website/ root@192.168.1.10:/var/www/
参数说明:
| 参数 | 作用 |
|---|---|
-a | 归档模式(保留权限、时间等) |
-v | 显示详细信息 |
-z | 传输时压缩 |
/ | 表示同步目录内容 |
二、指定 SSH 端口
如果服务器 SSH 不是 22 端口:
rsync -avz -e "ssh -p 2222" ./website/ root@server:/var/www/
三、默认只同步变化文件
rsync 默认只传输 改变的部分。
例如:
rsync -avz project/ root@server:/data/project/
第二次执行时:
只会上传修改过的文件
非常快
四、删除服务器多余文件
如果希望服务器完全和本地一致:
rsync -avz --delete ./website/ root@server:/var/www/
--delete 作用:
本地删除的文件
服务器也会删除。
使用要小心。
六、排除某些文件
排除单个文件和目录
例如排除 .git 和 node_modules:
rsync -avz \
--exclude ".git" \
--exclude "node_modules" \
./project/ user@server:/data/project/
排除某种类型文件
例如排除所有日志:
rsync -avz --exclude="*.log" ./project/ user@server:/data/project/
排除缓存:
rsync -avz --exclude="cache/" ./project/ user@server:/data/project/
使用排除文件列表
如果排除很多文件,可以写一个文件(类似 .gitignore)。
创建:
exclude.txt
内容:
.git
node_modules
*.log
cache/
tmp/
然后执行:
rsync -avz --exclude-from=exclude.txt ./project/ user@server:/data/project/
排除隐藏文件
排除所有隐藏文件:
rsync -avz --exclude=".*" ./project/ user@server:/data/project/
七、只看同步结果(dry run)
调试模式:
rsync -avzn ./project/ root@server:/var/www/project/
-n 表示 dry run。
八、本地 → 服务器 → 本地
同步方向:
本地 → 服务器
rsync -avz local/ user@server:/data/
服务器 → 本地
rsync -avz user@server:/data/ ./local/