`rsync` 和 `scp` 是 Linux/Unix 系统中常用的文件传输工具,但它们的用途和功能有所不同。以下是两者的对比和解释:
---
### **1. `scp` (Secure Copy)**
- **用途**:基于 SSH 协议,用于在本地和远程系统之间**安全地复制文件或目录**。
- **特点**:
- 简单直接,适合一次性传输。
- 传输时会对文件进行加密(SSH 加密通道)。
- 不支持增量传输(每次传输所有文件)。
- **常用命令**:
```bash
# 本地 → 远程
scp /path/to/local/file user@remote:/path/to/destination
# 远程 → 本地
scp user@remote:/path/to/remote/file /path/to/local/destination
# 递归传输目录
scp -r /local/dir user@remote:/remote/dir
```
- **缺点**:
- 传输大文件或频繁传输时效率较低(每次全量复制)。
---
### **2. `rsync` (Remote Synchronization)**
- **用途**:用于**高效同步文件或目录**,支持增量传输(仅传输差异部分)。
- **特点**:
- 增量传输:仅传输源和目标之间的差异部分,节省带宽和时间。
- 支持压缩传输(`-z` 选项)。
- 可保留文件权限、时间戳等元数据(`-a` 选项)。
- 支持删除目标端多余文件(`--delete` 选项)。
- 支持断点续传和部分传输。
- **常用命令**:
```bash
# 同步本地目录到远程(常用选项:-a 归档模式,-v 详细信息,-z 压缩)
rsync -avz /local/source/ user@remote:/remote/destination/
# 远程同步到本地
rsync -avz user@remote:/remote/source/ /local/destination/
# 删除目标端多余文件(谨慎使用!)
rsync -avz --delete /source/ user@remote:/destination/
```
- **适用场景**:
- 定期备份或同步大量文件。
- 需要保留文件属性和权限的传输。
- 网络带宽有限时的高效传输。
---
### **关键区别**
| 特性 | `scp` | `rsync` |
|---------------------|----------------------------|-------------------------------|
| **传输方式** | 全量传输 | 增量传输(仅传输差异) |
| **速度** | 较慢(大文件或频繁传输) | 更快(尤其适合重复同步) |
| **功能** | 简单复制 | 支持同步、删除、压缩、过滤等 |
| **资源消耗** | 低 | 较高(需计算文件差异) |
| **适用场景** | 单次简单传输 | 频繁同步或大规模数据传输 |
---
### **如何选择?**
- 使用 `scp`:适合快速、单次传输少量文件。
- 使用 `rsync`:需要增量同步、保留文件属性或处理大文件时。
例如:
- 临时传一个文件 → `scp`。
- 每天同步网站代码到服务器 → `rsync`。