小小白祈祷中...

rsync 是 Linux 和类 Unix 系统中一个强大的命令行工具,用于快速、高效地同步文件和目录。它支持本地同步、远程同步,并且可以增量传输文件(仅传输更改的部分),从而提高效率。rsync 常用于文件备份、远程复制以及数据迁移。


基本语法

1
rsync [选项] 源路径 目标路径
  • 源路径:需要同步的文件或目录。
  • 目标路径:同步的目标位置,可以是本地路径或远程路径。
  • 远程路径格式user@host:path

常用选项

选项 功能
-a 归档模式,递归传输,并保留文件权限、时间戳、符号链接等(常用)。
-v 显示详细信息(verbose)。
-z 在传输过程中压缩数据(适用于网络传输)。
-r 递归传输目录(包含子目录和文件)。
-u 仅更新文件(如果目标文件更新日期较新,则跳过)。
-t 保留文件的时间戳。
-p 保留文件权限。
--progress 显示同步的详细进度信息。
--delete 删除目标路径中源路径中不存在的文件(保持两端完全同步)。
--exclude 排除指定文件或目录(如 --exclude '*.log' 排除所有 .log 文件)。
--include 包含指定文件或目录(与 --exclude 结合使用)。
--dry-run 模拟执行命令,不真正传输文件(用于测试)。
-e 指定远程连接使用的加密协议(如 ssh)。

常用操作和示例

本地文件同步

将目录 /source/path 同步到 /destination/path

1
rsync -av /source/path /destination/path
  • 选项解释
    • -a:归档模式,保留文件属性。
    • -v:显示详细信息。
  • 注意
    • 如果源路径以斜杠 / 结尾(如 /source/path/),只同步目录内的内容。
    • 如果没有斜杠(如 /source/path),则整个目录包括其内容都会同步。

示例:

1
2
3
4
5
# 同步目录内容(不包含目录本身)
rsync -av /home/user/docs/ /backup/docs/

# 同步整个目录(包含目录本身)
rsync -av /home/user/docs /backup/

远程文件同步

从本地同步到远程

1
rsync -av /local/path/ user@remote_host:/remote/path/
  • 将本地的 /local/path/ 同步到远程主机的 /remote/path/

从远程同步到本地

1
rsync -av user@remote_host:/remote/path/ /local/path/
  • 将远程主机的 /remote/path/ 同步到本地的 /local/path/

压缩传输

  • 使用 -z 选项可以在传输过程中压缩数据以提高传输效率:
    1
    rsync -avz /local/path/ user@remote_host:/remote/path/

显示同步进度

  • 使用 --progress 查看每个文件的传输进度:
    1
    rsync -av --progress /source/path/ /destination/path/

删除目标中多余的文件

  • 使用 --delete 选项,可以删除目标路径中不存在于源路径的文件:
    1
    rsync -av --delete /source/path/ /destination/path/

注意

  • 使用 --delete 前建议加上 --dry-run 进行模拟测试,避免意外删除:
    1
    rsync -av --delete --dry-run /source/path/ /destination/path/

排除文件或目录

  • 使用 --exclude 排除特定文件或目录:
    1
    rsync -av --exclude '*.log' /source/path/ /destination/path/

排除多个文件/目录

1
rsync -av --exclude 'tmp/' --exclude '*.log' /source/path/ /destination/path/

排除和包含结合

1
rsync -av --exclude '*.tmp' --include '*.txt' /source/path/ /destination/path/

仅更新文件

  • 使用 -u 选项,只同步更新的文件(目标文件较新时不覆盖):
    1
    rsync -avu /source/path/ /destination/path/

测试同步(模拟执行)

  • 使用 --dry-run 模拟执行命令,不真正传输文件:
    1
    rsync -av --dry-run /source/path/ /destination/path/

使用 SSH 远程同步

  • 默认情况下,rsync 使用 rsh 作为远程传输协议。可以通过 -e 指定使用 ssh

    1
    rsync -av -e ssh /source/path/ user@remote_host:/remote/path/
  • 指定 SSH 端口:

    1
    rsync -av -e "ssh -p 2222" /source/path/ user@remote_host:/remote/path/

限制传输带宽

  • 使用 --bwlimit 限制传输速度(单位为 KB/s):
    1
    rsync -av --bwlimit=1000 /source/path/ /destination/path/

同步符号链接和特殊文件

  • 默认情况下,rsync 会同步符号链接而不是目标文件。如果需要同步符号链接,可以使用:
    1
    rsync -av --links /source/path/ /destination/path/

增量备份

  • 使用 --backup--backup-dir 创建增量备份:
    1
    rsync -av --backup --backup-dir=/backup/incremental /source/path/ /backup/full/

常见用法总结

用法 命令示例
本地目录同步 rsync -av /source/path/ /destination/path/
远程同步到本地 rsync -av user@remote_host:/remote/path/ /local/path/
本地同步到远程 rsync -av /local/path/ user@remote_host:/remote/path/
显示进度 rsync -av --progress /source/path/ /destination/path/
删除目标中多余文件 rsync -av --delete /source/path/ /destination/path/
排除文件/目录 rsync -av --exclude 'tmp/' /source/path/ /destination/path/
使用 SSH 同步 rsync -av -e ssh /source/path/ user@remote_host:/remote/path/
模拟运行(测试) rsync -av --dry-run /source/path/ /destination/path/
增量备份 rsync -av --backup --backup-dir=/backup/incremental /source/path/ /backup/full/

rsync 的优点

  1. 增量传输:仅传输更改的部分,节省带宽。
  2. 支持多种协议:支持本地和远程同步,远程同步可以通过 SSH 进行安全传输。
  3. 高效:支持压缩传输和快速文件对比。
  4. 灵活的选项:可以排除特定文件、删除多余文件等。

注意事项

  1. 斜杠区别

    • 源路径 带斜杠:仅同步目录内容。
    • 源路径 不带斜杠:同步整个目录及其内容。
  2. 小心使用 --delete

    • --delete 会删除目标路径中多余的文件,建议先使用 --dry-run 测试。
  3. 权限问题

    • 如果需要保留文件的权限、所有者等属性,可能需要使用 sudo

总结

rsync 是一个功能强大且高效的工具,适用于本地和远程的文件同步和备份。通过灵活的选项组合,rsync 能满足多种文件传输需求。熟练掌握 rsync 的用法,可以大大提高数据同步和备份的效率。