文件同步工具rsync

发布于 2024-05-14
更新于 2024-05-19

什么是rsync

rsync 是一个强大的文件同步工具,特别适合在不同计算机之间同步文件或备份数据,用于快速和灵活地同步文件和目录。它只会传输文件的差异部分,这使得它比传统的复制工具更高效。
rsync 是一个功能强大的工具,适用于备份、镜像和同步文件系统。了解并熟悉其选项和用法,可以大大提高文件传输和管理的效率。
rsync的优势:

  1. 高效传输rsync 只传输文件的更改部分,节省时间和带宽。
  2. 备份:可以轻松创建和维护本地和远程备份。
  3. 同步:保持多个位置的文件和目录内容一致。
  4. 灵活性:支持多种选项来满足不同的需求。

在大多数Linux发行版中,rsync 通常已经预装。如果没有,可以使用包管理器安装,例如:

bash
sudo apt-get install rsync  # 对于Debian/Ubuntu系统
sudo yum install rsync      # 对于CentOS/RHEL系统

rsync使用指南

基本命令结构

bash
rsync [OPTION]... SRC [SRC]... DEST
  • SRC 是源文件或目录。
  • DEST 是目标文件或目录。
  • [OPTION] 是一些可选参数,用于控制 rsync 的行为。

示例

  1. 本地同步

将源目录 /home/user/source/ 中的所有文件同步到目标目录 /home/user/destination/

bash
rsync -av /home/user/source/ /home/user/destination/
  • -a:归档模式,递归传输目录并保持文件属性(相当于 -rlptgoD)。
  • -v:详细模式,显示传输的详细信息。

  • 远程同步

将本地目录 /home/user/source/ 同步到远程主机 remotehost/home/user/destination/ 目录:

bash
rsync -av /home/user/source/ user@remotehost:/home/user/destination/

将远程目录同步到本地目录:

bash
rsync -avz user@remote:/remote/directory/ /local/directory/
  1. 排除特定文件

将本地目录同步到远程主机,但排除所有 .txt 文件:

bash
rsync -av --exclude '*.txt' /home/user/source/ user@remotehost:/home/user/destination/
  1. 压缩传输

通过压缩传输文件,以节省带宽:

bash
rsync -avz /home/user/source/ user@remotehost:/home/user/destination/
  • -z:压缩文件传输。

  • 其他 使用 ssh 作为传输协议:

bash
rsync -avz -e ssh /local/directory/ user@remote:/remote/directory/

删除目标目录中在源目录中不存在的文件:

bash
rsync -avz --delete /local/directory/ user@remote:/remote/directory/

常用选项

  • -a--archive:归档模式,递归传输目录,并保持文件属性(相当于 -rlptgoD)。
  • -v--verbose:详细模式,显示详细的操作信息。
  • -z--compress:在传输过程中压缩文件。
  • --exclude '*.txt':排除所有后缀为 .txt 的文件。
  • -r--recursive:递归传输目录及其内容。
  • -t:保持文件修改时间。
  • -g:保持文件组信息。
  • -o:保持文件所有者信息。
  • -D:保持设备文件和特殊文件。
  • --delete:删除目标目录中在源目录中不存在的文件。

  • 如果有多个不同类型的文件需要排除,可以使用多个 --exclude 选项,例如:

bash
rsync -avz --exclude '*.txt' --exclude '*.log' /local/directory/ user@remote:/remote/directory/
  • 如果需要排除的文件类型较多,或需要更复杂的排除规则,可以使用 --exclude-from 选项指定一个包含排除规则的文件。例如,创建一个名为 exclude-list.txt 的文件,其中每一行包含一个排除模式:
text
*.txt
  *.log

然后在 rsync 命令中使用该文件:

bash
rsync -avz --exclude-from='exclude-list.txt' /local/directory/ user@remote:/remote/directory/

关于-z参数

使用 -z 选项进行传输压缩是安全的,不会对文件造成损坏。它主要用于优化网络传输性能,特别是在低带宽环境中,可以显著减少传输时间。
这个选项的作用是在传输数据时进行压缩,从而减少网络带宽的使用量,并加快传输速度。文件在到达目标主机后,会自动解压缩,恢复为原始状态。

  • 压缩传输: -z 选项会在文件传输过程中对数据进行压缩,这仅仅是为了减少数据传输量。传输完成后,文件会被解压缩,恢复为原始文件。
  • 透明处理: 压缩和解压缩过程是透明的,对于用户和文件本身没有任何影响,文件的内容和完整性保持不变。

注意:
虽然 -z 选项本身是安全的,但在以下情况下需要注意: - 网络环境: 在低带宽或高延迟的网络环境中,使用 -z 选项可以显著提高传输效率。 - CPU开销: 压缩和解压缩过程需要消耗一些CPU资源。如果传输文件数量巨大或文件本身已经压缩(如 .zip.tar.gz 文件),压缩可能不会带来显著的优势,反而增加CPU负载。

在WSL中使用rsync

Windows本身没有内置的rsync工具,需要通过第三方工具来实现。
Windows Subsystem for Linux (WSL)允许你在Windows 10和Windows 11上运行Linux环境。你可以安装一个Linux发行版,并在其中使用rsync

安装WSL和Linux发行版(如Ubuntu):

  • 打开PowerShell(以管理员身份)并运行以下命令以启用WSL和安装Ubuntu:
powershell
wsl --install
  • 完成安装后,打开Ubuntu终端并安装rsync
bash
sudo apt update
    sudo apt install rsync