1. 概述
rsync 是 Remote Sync 的缩写,即远程同步的意思。rsync 是一个用于传输和同步文件和文件夹的实用命令行工具。
本教程我们将学习如何使用 rsync 在两台电脑之间复制文件。
2. rsync 的优势
作为文件复制工具,rsync 具有许多优点:
- 支持复制链接、设备、所有者和用户组、以及访问权限
- 通过 –exclude 和 –exclude-from 选项,允许我们排除某些文件
- 可以通过 SSH 进行安全传输
- 可仅传输新的或修改过的文件,以最大限度地减少需要传输的数据量
- 在发送和接收数据时会压缩数据。因此,我们可以使用它来发送更大的文件
了解完 rsync 的优势后,下面我们学习如何安装 rsync。
3. 安装 rsync
大多数 Linux 发行版都预装了 rsync,无需安装。但如果你不小心删除了,我们可以重新安装它:
# Debian 安装方式
$ sudo apt update
$ sudo apt install rsync
# Fedora 上安装
$ sudo dnf install rsync
# CentOS 及 RedHat 上安装
$ sudo yum install rsync
# openSUSE 安装
$ sudo zypper install rsync
# Arch Linux 上安装
$ pacman -S rsync
使用下面命令,验证 rsync 是否安装成功:
$ rsync --version
rsync version 3.1.3 protocol version 31
Copyright (C) 1996-2018 by Andrew Tridgell, Wayne Davison, and others.
我们已经成功安装 rsync。下面学习如何使用
4. 拷贝文件和文件夹
rsync 命令用法如下:
$ rsync [options] [source files and directories] [destination]
下面具体演示
4.1. 复制文件
最简单的,复制本地文件到远程系统:
rsync -a /home/user/Downloads/file.txt root@5.182.18.49:/home/Files
root@5.182.18.49's password:
其中:
-a
表示存档模式(archive mode)。它会递归复制(同步文件夹时),并保留几乎所有的内容如符号链接、权限、修改时间、用户组、所有权、设备文件等- file.txt 是我们要复制的文件
- /home/Files 是我们要保存的远程路径
运行命令后,会要求我们输入远程主机的 SSH 密码,然后开始复制。
4.2. 复制文件夹
复制本地文件夹到远程:
rsync -a /home/user/Downloads/Temp root@5.182.18.49:/home/Files
root@5.182.18.49's password:
4.3. 复制文件夹下的内容
仅复制文件夹下的内容,而不包括文件夹本身:
rsync -a /home/user/Downloads/Temp/ root@5.182.18.49:/home/Files
上面命令会复制 Temp 下的所有文件和文件夹到远程的/home/Files目录下。
注意Temp后面有个斜杠,表示仅复制文件夹下的内容,不复制自身。
4.4. 排除文件
使用 –exclude 和 –exclude-from 选项可排除不需要同步的文件名。
–exclude 接收单个匹配模式(patten),而 —exclude-from 支持从配置文件中读取多个匹配模式(patten)。
示例:
ls
file1.txt file2.txt file3.txt new_file.pdf
rsync -a --exclude="*.txt" /home/user/Downloads/Temp/ root@5.182.18.49:/home/Files
root@5.182.18.49's password:
这将排除 Temp 目录中的所有txt文件。因此,只会复制 new_file.pdf。
再看另一个例子:
$ ls
$ exclude_patterns.txt file1.txt file2.txt file3.txt new_file.pdf picture.jpg
$ cat exclude_patterns.txt
$ *.txt
$ *.pdf
$ rsync -a --exclude-from="exclude_patterns.txt" /home/user/Downloads/Temp/ root@5.182.18.49:/home/Files/Temp
$ root@5.182.18.49's password:
这次,我们有多个模式(.txt和.pdf)需要 rsync 排除。因此,我们将它们写入名为 exclude_patterns.txt 的文件中,并通过 –exclude-from 参数指定。
命令运行后,只有 picture.png 会被复制到远程主机上。
4.5. 发送大文件
在传输大量数据时,我们可以添加 -P 选项(它是--progress和--partial的结合),这样rsync 在传输过程中会显示进度,并且保留部分传输的文件 (rsync默认会删除只传了一半的文件,加上这个参数告诉后rsync不要删,下次恢复后继续传):
$ ls
file1.txt file2.txt file3.txt new_file.pdf picture.jpg video.mkv
$ rsync -a -P /home/user/Downloads/Temp/ root@5.182.18.49:/home/Files/Temp
root@5.182.18.4’s password:
sending incremental file list
./
file1.txt
0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=5/8)
file2.txt
0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=4/8)
file3.txt
0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=3/8)
new_file.pdf
0 100% 0.00kB/s 0:00:00 (xfr#5, to-chk=2/8)
picture.jpg
0 100% 0.00kB/s 0:00:00 (xfr#6, to-chk=1/8)
video.mkv
245,379,066 100% 570.99kB/s 0:06:59 (xfr#7, to-chk=0/8)
5. 总结
本文我们学习了在不同场景中使用 rsync 的几个示例。rsync 跨网同步文件和文件夹同步上提供了许多优势。