Code前端首页关于Code前端联系我们

rsync新手教程:安装、基本使用、同步、备份...

terry 2年前 (2023-09-28) 阅读数 64 #未命名

简介

rsync是一款常用的Linux文件同步应用程序。

可以在本地计算机和远程计算机之间,或两个本地文件夹之间同步文件(但不支持远程计算机之间的同步)。它还可以用作文件复制工具,替换命令cpmv

其名称中的r指的是remote,rsync代表“远程同步”。与其他文件传输工具(例如 FTP 或 scp)不同,rsync 的主要特点是发送方和接收方检查现有文件并仅传输已更改的部分(通常的规则是文件大小或修改时间。已更改)。

虽然rsync不包含在SSH工具中,但这里包含它是因为它也是远程操作。

安装

如果本地或远程计算机上未安装rsync,可以使用以下命令进行安装。

# Debian
$ sudo apt-get install rsync

# Red Hat
$ sudo yum install rsync

# Arch Linux
$ sudo pacman -S rsync

注意传输双方都必须安装rsync。

基本用法

rsync 可用于同步本地计算机上的两个文件夹。下面以本地同步为例,讲解rsync的很多关键参数的使用。

-r 参数

使用原生 rsync 命令时,可以代替 cp 和 ♽ 到 ♽ 目录命令的目标目录。

$ rsync -r source destination

上述命令中,-r表示返回,即包含子目录。注意需要-r,否则rsync会失败。 source 代表源文件夹,destination 代表目标文件夹。执行上述命令后,目标目录中会出现子目录destination/source

如果需要合并的文件或文件夹较多,可以这样写。

$ rsync -r source1 source2 destination

在上面的命令中,source1source2将与

-a组合参数

-a即可替换符号-r。除了迭代同步之外,还可以聚合元信息(例如修改时间、权限等)。因为 rsync 默认使用文件大小和修改时间来确定文件是否需要更新,所以 -a-r 更有用。以下用法是标准拼写。

$ rsync -a source destination

目标号码destinasyon如果不存在,rsync将自动创建它。执行上述命令后,源文件夹source被完整复制到目标文件夹destination,创建文件夹结构❀♽。

如果您只想将源目录source 的内容与目标目录destination 相匹配,则需要添加源斜杠。

$ rsync -a source/ destination

上述命令完成后,source的内容会复制到destination文件夹中的destination文件夹中,并且不会在下面 那个目录。 子目录。

-n参数

如果不确定执行rsync后的结果是什么,可以先使用-n”或”或”来模拟谋杀的结果。

$ rsync -anv source/ destination

上述命令中,参数-n预测命令执行结果,不执行命令。符号-v将结果输出到终端,这样你就可以看到要编辑的内容。

--delete 参数

默认情况下,rsync 仅确保源目录的所有内容(明确排除的文件除外)复制到目标目录。它不允许两个文件夹相同,并且不会删除文件。如果要使目标目录成为源目录的副本,则必须使用--delete参数,该参数将删除仅存在于目标目录中而不存在于源目录中的文件。

$ rsync -av --delete source/ destination

在上面的命令中,--删除将使目的地成为❀源的镜像。

排除文件

--排除 参数

有时,您希望在同步过程中排除某些文件或文件夹。这种情况下,我们可以使用参数--exclude来指定排除方法。

$ rsync -av --exclude='*.txt' source/ destination
# 或者
$ rsync -av --exclude '*.txt' source/ destination

以上命令不包含所有TXT文件。

请注意,rsync 将同步以“点”开头的加密文件。要排除隐藏文件,您可以输入 --exclude=".*"

如果你想排除某个文件夹中的所有文件,但又不想排除该文件夹本身,可以这样写。

$ rsync -av --exclude 'dir1/*' source/ destination

对于多种排除方法,可以使用参数--排除

$ rsync -av --exclude 'file1.txt' --exclude 'dir1/*' source/ destination

多个排除模块也可以利用 Bash 强大的扩展功能,仅使用 --exclude 参数。

$ rsync -av --exclude={'file1.txt','dir1/*'} source/ destination

如果有多个排除模式,您可以将它们写入一个文件中,每个模式一行,然后使用标签 --exclude-from 定义此文件。

$ rsync -av --exclude-from='exclude-file.txt' source/ destination

--include参数

--include参数用于指定必须包含的文件格式,通常与-♽de一起使用。

$ rsync -av --include="*.txt" --exclude='*' source/ destination

指定上述命令同步时,不会包含所有文件,但会包含TXT文件。

远程同步

SSH协议

rsync 除了支持两个本地目录之间的同步之外,rsync还支持远程同步。可以将本地内容同步到远程服务器。

$ rsync -av source/ username@remote_host:destination

您还可以将远程内容与本地内容同步。

$ rsync -av username@remote_host:source/ destination

rsync 默认使用 SSH 进行远程访问和数据传输。

由于rsync原本并没有使用SSH协议,所以需要用-e来指定协议,后来改了。所以下面的-e ssh可以去掉。

$ rsync -av -e ssh source/ user@remote_host:/destination

但是,如果 ssh 命令有附加参数,则必须使用 -e 来指定要执行的 SSH 命令。

$ rsync -av -e 'ssh -p 2234' source/ user@remote_host:/destination

上述命令中,参数-e指定SSH使用2234端口。也可以使用协议 rsync://(默认端口 873)进行传输。一种特殊的写法是用两个冒号分隔服务器和目标目录::

$ rsync -av source/ 192.168.122.32::module/destination

注意,上面地址中的module不是实际的路径名,而是rsync守护进程的资源名称,由管理员分配。

如果您想了解rsync守护进程提供的所有模块的列表,您可以运行以下命令。除了使用

$ rsync rsync://192.168.122.32

rsync协议中的两个参数外,还可以直接使用rsync协议://指定地址。

$ rsync -av source/ rsync://192.168.122.32/module/destination

增量备份

rsync的主要特点是支持增量备份,这意味着默认情况下只复制发生变化的文件。

除了源目录和目标目录直接同步之外,rsync还支持使用根目录,即将源目录和根目录之间的更改合并到目标目录中。

特殊的做法是,第一个设置是全量备份,所有文件都合并到主文件夹中。下一次同步将是增量备份。仅合并源文件夹和基础文件夹之间发生更改的部分,并且该部分将保存在新的目标文件夹中。这个新的目标文件夹也包含了所有文件,但实际上这个文件夹中只有变化的文件,其他未变化的文件都是指向主文件夹文件的硬链接。

--link-dest 用于指定同步的基目录。

$ rsync -a --delete --link-dest /compare/path /source/path /target/path

上述命令中,参数--link-dest指定基目录/compare/path,然后/ / /

# Debian
$ sudo apt-get install rsync

# Red Hat
$ sudo yum install rsync

# Arch Linux
$ sudo pacman -S rsync

与根目录进行比较。对比,找到改动的文件,复制到目标目录/target/path。未修改的文件将导致硬链接。该命令中的第一次备份为全量备份,后续备份为增量备份。

下面是支持用户目录的示例脚本。

#!/bin/bash

# A script to perform incremental backups using rsync

set -o errexit
set -o nounset
set -o pipefail

readonly SOURCE_DIR="${HOME}"
readonly BACKUP_DIR="/mnt/data/backups"
readonly DATETIME="$(date '+%Y-%m-%d_%H:%M:%S')"
readonly BACKUP_PATH="${BACKUP_DIR}/${DATETIME}"
readonly LATEST_LINK="${BACKUP_DIR}/latest"

mkdir -p "${BACKUP_DIR}"

rsync -av --delete \
  "${SOURCE_DIR}/" \
  --link-dest "${LATEST_LINK}" \
  --exclude=".cache" \
  "${BACKUP_PATH}"

rm -rf "${LATEST_LINK}"
ln -s "${BACKUP_PATH}" "${LATEST_LINK}"

在上面的脚本中,每次同步都会创建一个新文件夹${BACKUP_DIR}/${DATETIME},并指向软链接${BACKUP_DIR}文件夹。 。下次备份时,以${BACKUP_DIR}/latest为基目录创建新的备份目录。最后,将软链接${BACKUP_DIR}/latest指向新的备份目录。元素

-a--archive表示归档方式,保存所有元数据,例如修改时间(修改时间)等。并且软件链接也会被编译。

--append该标志指定文件从上次中断的位置恢复传输。

--append-verify--append相同,但会在传输完成后验证文件。如果验证失败,将返回整个文件。

-b--backup指定当目标目录中的现有文件被删除或更新时,对该文件进行重命名,然后进行备份。默认行为是删除。重命名规则是添加--suffix定义的文件后缀。默认为~。参数

--backup-dir指定备份时保存文件的目录,如--backup-dir=/path/to/backups。参数

--bwlimit指定带宽限制。常用单位为KB/s,如--bwlimit=100

-c--checksum更改rsync的校验和方法。默认情况下,rsync仅检查文件大小和上次修改日期是否发生变化,如果发生变化,则重新运行;使用该参数后,通过判断文件内容来决定重新发送。

--delete符号删除只存在于目标目录中而源目标中不存在的文件,这样可以确保目标目录是源目标的镜像。

-e参数指定使用SSH协议传输数据。

--exclude 参数指定排除不兼容的文件,例如 --exclude="*.iso"。参数

--exclude-from指定本地文件,其中包含要排除的文件的模式,每个模式一行。

--已存在的--忽略-不存在的表示目标目录中不存在的文件和文件夹。符号

-h 表示以人类可读格式输出。

-h--help返回帮助信息。

-i符号表示输出源目录和目标目录之间的文件差异的详细信息。标志

--ignore-existing表示如果目标目录中仍然存在该文件,则该文件将被忽略,并且不会编辑这些文件。

--include 参数指定同步期间要包含的文件,通常与 --exclude 结合使用。

--link-dest参数指定增量备份的基目录。参数

-m 指定不始终配置目录。参数

--max-size设置上传的最大文件大小限制,例如不超过200KB(--max-size='200k')。

--min-size参数设置要传输的最小文件大小限制,例如不少于10KB(--min-size=10k)。符号

-n 或符号 --dry-run 模拟要执行的操作,而不实际执行它。与 -v 标签一起使用可查看要关注的内容。参数

-P是两个参数 - 进度 - 部分的组合。符号

--部分 可以使中断的传输继续进行。当不使用此参数时,rsync将删除传输中途中断的文件;使用此参数后,已传输一半的文件将合并到目标文件夹中,并在下次同步时恢复中断的传输。 。一般需要与--输入--勾选一起使用。

--partial-dir参数指定将部分传输的文件保存到临时目录,例如--partial-dir=.rsync-partial。一般需要与--输入--勾选一起使用。

--progress表示显示进度。符号

-r表示返回,即包含子目录。

--remove-source-files 标志表示发送者的文件将在传输完成后被删除。标志

--size-only表示仅合并调整大小的文件,无论文件修改时间如何差异。

--suffix参数指定备份文件名时要添加到文件名的后缀。默认为~。参数

-u--update表示同步时将跳过目标目录中修改时间更新的文件,即不会合并参数更新的文件。符号

-v表示输出细节。 -vv表示发布更详细的信息,-vvv表示发布最详细的信息。

--version返回rsync版本。参数

-z指定同步期间的数据压缩。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门