rsync 表示 remote sync 远程同步的意思。
在使用rsync时,可以使用很多选项,指定递归传输、文件修改时间的传输、文件权限、符号链接等。这些选项组合起来就是 -rlptgoD
。
但是我们可以直接使用 -a
这个归档选项。等同于 -rlptgoD
。
另外,注意目录末尾添加了反斜杠,这样做的目的是防止在dst目录下创建另外级别的目录。
$rsync -a /src/ /dst/
如果发生了错误,可以使用 -v
(详细)选项获取有关当前传输的更多信息:
$rsync -av /src/ /dst/
默认情况下,rsync 不会从目标目录中删除任何文件。它只会传输新文件和对当前文件所做的更改。如果要删除目标目录中的无关文件,可以在命令中添加 --delete
选项。
$rsync -av --delete /src/ /dst/
如果我们想查看 rsync 计划进行哪些更改,我们可以在命令中使用 -n
或者 --dry-run
标志。
特别是在使用了--delete
选项的情况下,它可以告诉我们将要删除哪些文件。
$rsync -avn --delete /src/ /dst/
rsync可以用来和远程服务器系统进行数据同步。
要通过 SSH 运行 rsync,我们可以在命令中添加 -e ssh
选项。
$rsync -av -e ssh /src/ user@remote:/path/to/dst/
如果远程ssh服务器不是默认端口,则使用-p指定:
$rsync -av -e 'ssh -p 2200' /src/ user@remote:/path/to/dst/
当使用 rsync 进行远程传输时,--partial
和 --progress
选项非常有用。如果先前的同步中断,它们将恢复部分传输,并分别显示所有文件的当前传输进度。我们可以使用 -P
选项将这两个功能组合成一个标志。
$rsync -avP -e ssh /src/ user@remote:/path/to/dst/
另一个与远程传输相关的有用选项是 -z
标志,它将启用文件压缩。这可以节省一点带宽并加快数据传输速度。
$rsync -avPz -e ssh /src/ user@remote:/path/to/dst/
默认情况下,rsync 检查文件的大小和修改时间以检测是否进行了更改。如果源目录和目标目录中的文件具有相同的大小和 mtime,则 rsync 会跳过该文件。在 99.99% 的情况下,这足以检测是否对文件进行了更改。但是还有一个 -c
选项会检查每个文件的校验和。
这可以确保文件完全一致。
$rsync -avc /src/ /dst/
使用 --exclude
选项排除不需要同步的文件和目录。 下面的命令将排除 /src/.cache/目录:
$rsync -av --exclude .cache /src/ /dst/
如果要排除很多文件和目录,可以将他们写到一个文件中(每行一个文件)。然后使用 --exlude-from
选项告诉 rsync包含排除列表的文本文件的位置。
$rsync -av --exclude-from exclusions.txt /src/ /dst/
在rsync中,可以使用通配符:
$rsync -av --exclude *.jpg --exclude *.txt /src/ /dst/
使用-h
选项,将统计信息以人类可读的方式显示:
$rsync -avh /src/ /dst/
使用-i
选项查看每个文件的更改情况:
$rsync -avi /src/ /dst/
将 rsync 的所有输出保存到文本文件,错误消息仍然会显示在终端屏幕。
$rsync -av /src/ /dst/ > rsync.log
查看 rsync 的输出,同时将rsync 的所有输出保存到文本文件。
$rsync -av /src/ /dst/ > | tee rsync.log
不更新文件的所有者、组和权限:
$rsync -av --no-perms --no-owner --no-group /src/ /dst/
使用-H
选项以保留硬链接。
$rsync -avH /src/ /dst/
使用 -l
选项将符号链接复制为符号链接,或者使用 -L
选项将符号链接转换为远程目标中的引用文件或者目录。
$rsync -avL /src/ /dst/
我们可以使用 --max-size
选项指示 rsync 只传输小于特定大小的文件。
$rsync -av -e ssh --max-size='500k' /src/ user@remote:/path/to/dst/