scp 和 rsync 通过 SSH 复制文件。当 SFTP 不方便时,可以使用它们来传输配置文件、脚本、备份、世界文件和服务器文件夹。
scp 适用于快速的一次性复制。rsync 更适合重复同步,因为它可以仅复制更改的文件、保留权限、排除文件夹、预览更改,并在您要求时镜像删除。
使用 scp 复制单个文件
scp ./server.cfg username@VPS_IP_ADDRESS:/home/username/server.cfg
使用 scp 复制文件夹
scp -r ./world username@VPS_IP_ADDRESS:/home/username/world
使用自定义 SSH 端口与 scp
scp 使用大写的 -P 指定 SSH 端口:
scp -P 2222 ./server.cfg username@VPS_IP_ADDRESS:/home/username/server.cfg
使用 SSH 密钥与 scp
scp -i ~/.ssh/mykey ./server.cfg username@VPS_IP_ADDRESS:/home/username/server.cfg
使用 rsync 同步文件夹
rsync -avz ./world/ username@VPS_IP_ADDRESS:/home/username/world/
尾部的斜杠很重要。./world/ 将文件夹的内容复制到目标文件夹中。没有尾部斜杠,rsync 会将文件夹本身复制到目标中。
在复制前预览 rsync
当您想在更改远程文件之前检查会发生什么时,使用 --dry-run:
rsync -avz --dry-run ./world/ username@VPS_IP_ADDRESS:/home/username/world/

精确镜像文件夹
--delete 删除远程文件中不再存在的本地文件。这对于精确镜像很有用,但如果指向错误的文件夹则很危险。
rsync -avz --delete ./world/ username@VPS_IP_ADDRESS:/home/username/world/
如果您使用 --delete,请先运行带 --dry-run 的相同命令。
排除文件或文件夹
排除日志、缓存文件夹、临时文件或您不想复制的生成文件:
rsync -avz --exclude "logs/" --exclude "*.tmp" ./server/ username@VPS_IP_ADDRESS:/home/username/server/
使用自定义 SSH 端口与 rsync
rsync 通过 -e 传递 SSH 选项:
rsync -avz -e "ssh -p 2222" ./server/ username@VPS_IP_ADDRESS:/home/username/server/
使用 SSH 密钥与 rsync
rsync -avz -e "ssh -i ~/.ssh/mykey" ./server/ username@VPS_IP_ADDRESS:/home/username/server/
从 VPS 复制回您的 PC
下载 VPS 上的文件夹时,反转源和目标:
rsync -avz username@VPS_IP_ADDRESS:/home/username/world/ ./world-backup/
有用的 rsync 选项
| 选项 | 功能 |
|---|---|
-a | 归档模式。保留文件夹、权限、时间戳和符号链接。 |
-v | 详细输出,以便您可以看到正在复制的内容。 |
-z | 在传输过程中压缩数据。适用于较慢的连接。 |
--progress | 显示大文件的复制进度。 |
--dry-run | 显示会发生什么而不更改文件。 |
--delete | 删除源中不存在的远程文件。 |
--exclude | 跳过匹配的文件或文件夹。 |
何时使用每个工具
| 工具 | 最佳用途 |
|---|---|
scp | 简单的一次性文件或文件夹复制。 |
rsync | 重复同步、大型文件夹、备份、排除、预览和仅复制更改的文件。 |
在替换实时世界文件、数据库文件或保存文件之前,请停止游戏服务器。如果您使用 --delete 或覆盖现有世界,请先进行备份。
