10 个有用的 Linux rsync 命令示例

已发表: 2022-10-28
显示 bash 提示符的 Linux 笔记本电脑
fatmawati achmad zaenuri/Shutterstock.com

Linux rsync命令是一个强大的文件复制和文件夹同步工具。 这里有十个常见用例,您可以在自己的系统上充分利用它们。

目录

rsync 工具

rsync工具在两台计算机之间复制文件和目录。 它使用一种复杂的算法扫描目录树以查找源计算机上目标计算机上不存在的文件。 这些文件被传输到目标计算机。 rync如此聪明的原因在于它可以找出哪些现有文件已被修改,并且它只发送已更改的部分

您可以使用rsync将文件复制到硬盘驱动器上的不同位置、同一计算机中的不同硬盘驱动器、外部连接的 USB 驱动器或任何其他网络可访问的位置。

如何使用 rsync 备份你的 Linux 系统
相关如何使用 rsync 备份你的 Linux 系统

最重要的是, rsync可以选择保留符号链接、硬链接和文件元数据,例如文件所有权、权限和访问时间。 为了支持所有这些功能, rsync有许多选项,并且将它们全部弄清楚需要时间。 我们收集了这 10 个示例来帮助您入门。 我们已经写过关于使用rsync进行备份的文章,所以我们在这里专注于其他用途。

对于它的所有选项, rsync命令的结构很简单。 我们需要提供源、目的地和我们想要使用的选项。 你可能会发现rsync已经安装在你的 Linux 计算机上——它安装在我们所有的测试机器上——但如果没有,它肯定会在你的发行版的存储库中。

1.将文件复制到不同的目录

这是一个简单的例子,让我们继续前进。 我们要将文件从“project-files”目录复制到“Doc​​uments”目录。 我们使用两个选项, -a (归档)选项和-v (详细)选项。 verbose 选项告诉rsync解释它在做什么。 archive选项保留文件所有权和我们稍后将看到的其他一些项目。

命令的格式是options source-location destination-location

 rsync -av /home/dave/project-files/ /home/dave/Documents/ 

使用 rsync 将文件复制到同一台计算机上的不同目录

在“Documents”文件夹上使用ls显示文件已被复制。

列出文档目录中的文件

rsync工作时,文件会在复制时列出。 被告诉:

  • 发送的字节数。
  • 接收的字节数。 在文件传输发生之前, rsync必须确定需要传输哪些文件。 为此,必须通过rsync检索有关目标文件的一些信息。 该信息包含在接收的字节中。
  • 传输速度。
  • 复制文件的总大小。
  • “加速”。 这是总大小除以发送和接收字节之和的比率。 这个数字越高,传输效率越高。

我们修改了源目录中的文本文件并重复了rsync命令。

 rsync -av /home/dave/project-files/ /home/dave/Documents/ 

使用 rsync 将文件复制到同一台计算机上的不同目录

这次唯一需要更新的文件是我们修改的文本文件。 加速数字现在是 30,850。 这就是复制单个文件的修改部分比复制所有文件效率高得多。

-a (归档)选项实际上代表了其他选项的集合。 这与使用所有这些选项相同:

  • r :递归处理源目录中的目录树并将它们复制到目标目录,如果它们不存在则创建它们。
  • l :将符号链接复制为符号链接。
  • p :保留文件权限。
  • t :保留文件修改时间。
  • g :保留组权限。
  • o :保留文件所有权。
  • D :复制特殊文件和设备文件。 特殊文件可以是被视为文件的以通信为中心的项目,例如套接字和先进先出管道 (fifos)。 设备文件是提供对设备和伪设备的访问的特殊文件。

这是一个经常使用的组合,以至于rsync提供了-a (归档)选项作为调用它们的简写方式。

2.将目录复制到不同的目录

如果您查看前面的rsync命令,您会在源目录的文件路径上看到尾部正斜杠“/”。 这很重要。 它告诉rsync复制目录的内容。 如果您不提供尾部正斜杠, rsync将复制目录及其内容。

 rsync -av /home/dave/project-files /home/dave/Documents/ 

使用 rsync 将目录及其内容复制到同一台计算机上的不同目录

这一次,目录名称被添加到列出的文件名中。 如果我们查看目标目录,我们会看到源文件夹已被复制到其中的文件。

 ls 文件/
 ls 文档/项目文件/ 

列出传输目录中复制的文件

3. 将目录复制到不同的驱动器

将文件复制到同一硬盘驱动器上的另一个位置并不能保护您免受驱动器故障。 如果该驱动器放弃了幽灵,那么您就丢失了这些文件的源副本和目标副本。 将它们复制到另一个硬盘驱动器是保护数据的一种更可靠的方法。 我们需要做的就是提供到目标驱动器的正确路径。

 rsync -av /home/dave/project-files /run/mount/drive2 

将文件复制到同一台计算机的不同硬盘驱动器

查看另一个硬盘驱动器向我们展示了已复制到其中的目录和文件。

 ls 运行/挂载/drive2/项目文件/ 

列出复制到同一台计算机的另一个硬盘驱动器的文件

相关:当您的硬盘驱动器出现故障时该怎么办

4. 先做空运行

在我们了解rsync如何有效地为我们删除文件之前,让我们看看我们如何使rsync执行空运行。

在试运行中, rsync会执行我们要求的动作,但实际上并没有执行它们。 它报告如果命令被执行会发生什么。 这样,我们可以确保该命令完全符合我们的预期。

要强制进行空运行,我们使用--dry-run选项。

 rsync -av --dry-run /home/dave/geocoder /run/mount/drive2 

执行 rsync 命令的试运行

为我们列出了可能被复制的文件,我们得到了通常的统计数据,然后是消息(DRY RUN) ,这样我们就知道实际上没有发生任何事情。

5. 删除目标目录中的文件

--delete选项告诉rsync删除目标目录中不在源目录中的文件和目录。 这意味着目标目录将是源目录的精确副本。 我们将谨慎并首先使用--dry-run选项。

 rsync -av --delete --dry-run /home/dave/geocoder /run/mount/drive2 

执行可能删除文件的 rsync 命令的试运行

我们被告知有两个文件将被删除。 如果我们确定我们不在乎它们会被删除,我们可以删除--dry-run选项并真正执行该命令。

 rsync -av --delete /home/dave/geocoder /run/mount/drive2 

复制文件并从目标目录中删除不在源目录中的文件

这次目录的内容是同步的,两个多余的文件被删除了。

6. 删除源文件

您可以选择在传输成功后删除源文件,使rsync的操作更像是移动而不是复制。 如果传输不成功,则不会删除源文件。 我们需要使用的选项是--remove-source-files

 rsync -av --remove-source-files /home/dave/geocoder /run/mount/drive2 

成功传输后强制 rsync 删除源文件

请注意,即使没有传输文件,也可以删除文件。 那是因为如果rsync检查,并且所有文件都已经在目标目录中并且rsync没有什么可做的, rsync认为传输成功。

此外, rsync仅从源目录中删除文件。 它不会删除源目录或任何子目录,只删除其中的文件。 我们可以通过在源目录上使用-R (递归)选项和ls来看到这一点。

 ls -R 地理编码器

rsync 删除源文件后的空目录树

7. 将文件复制到远程计算机

要将文件夹与远程计算机同步,必须在两台计算机上都安装rsync 。 在尝试使用rsync连接到远程计算机之前,请在两台计算机之间设置 SSH 通信。

如何从 Linux Shell 创建和安装 SSH 密钥
相关如何从 Linux Shell 创建和安装 SSH 密钥

您需要能够以远程计算机上的普通用户身份远程登录, rsync才能工作。 无论您是否使用 ID 和密码登录,或者您是否设置了 SSH 密钥以实现安全无密码访问,但如果您无法以用户身份登录,则rsync将不起作用任何一个。

如果您使用密码登录, rsync会提示您输入密码。 如果你使用 SSH 密钥登录,在这个过程中是无缝的。

您唯一需要做的额外事情是将远程计算机的用户帐户名称和 IP 地址添加到目标文件路径的开头。 使用 at 符号“ @ ”将用户名与计算机名或 IP 地址分开,使用冒号“ : ”将计算机名或 IP 地址与目录路径分开。

在我们的测试网络上,这两个命令是等价的。

 rsync -av /home/dave/geocoder [email protected]:/home/dave/Downloads
 rsync -av /home/dave/geocoder [email protected]:/home/dave/Downloads 

使用 rsync 通过 SSH 将文件复制到远程计算机

我们得到的信息与我们在本地复制文件时得到的信息相同。

8. 包含或排除文件或目录

您可能在源目录中有不想复制到目标计算机的文件和目录。 您可以使用--exclude选项排除它们。 以类似的方式,您可以选择使用--include选项包含特定文件和目录。

奇怪的是,如果您单独使用--include选项,所有文件都会像往常一样被复制——包括您特别包含的文件。 要仅复制包含的文件,您必须--exclude其他所有内容。

您可以在命令中使用尽可能多的--include--exclude选项,但请确保将--exclude --include之前。 此外,请确保您的源文件路径上有一个尾部正斜杠。

此命令仅将 C 源代码文件和 CSV 数据文件复制到目标计算机。

 rsync -av --include="*.c" --include="*.csv" --exclude="*" /home/dave/geocoder/ /run/mount/drive2/geocoder

使用 rsync 将选定的文件复制到同一台计算机上的不同硬盘驱动器

唯一复制的文件是我们特别包含的文件。

9. 压缩传输中的文件

-z (压缩)选项使rsync压缩传输的文件。 但是,它们不会作为压缩文件存储在目标计算机上,它们仅在传输过程中被压缩。 这可以加快长时间的传输。

 rsync -avz /home/dave/geocoder /run/mount/drive2 

使用 -z rsync 选项在传输文件时压缩文件

10. 监控进度

说到冗长的转账,我们可以添加一些统计数据,这样我们就可以看到转账的进度。

-P (partial, progress) 选项实际上增加了两个选项, --partial--progress--partial选项告诉rsync在传输失败时保留部分传输的文件。 这样可以节省重新开始传输的时间。

--progress选项为每个文件打印传输的数据(以字节为单位)和百分比、传输速度、所用时间、正在传输的文件数量以及剩余文件的数量。

 rsync -aP /home/dave/geocoder /run/mount/drive2 

使用 -P 选项为每个文件的传输提供统计信息

输出很快滚动过去,很难阅读。 您可以通过从命令中删除-v (详细)选项来稍微改进一下。 即便如此,它仍然难以阅读,因为它呼啸而过。

每个传输文件的传输统计信息

监控整体传输的进度通常更有用。 您可以使用 –info 选项执行此操作,并将其作为参数传递“progress2”。

 同步 -a --info=progress2 /home/dave/geocoder /run/mount/drive2 

整体 rsync 传输的统计信息

这给出了一个实际有用的进度报告。

就像类固醇上的cp

rsync命令快速、灵活,值得您花时间熟悉它。 带有-av选项、源目录和目标目录的rsync命令的基本形式一点也不难记住。

对于许多用例,这就是您所需要的。 对此感到满意,其余的就很容易了。

相关:使用 Rsync 同步数据的非初学者指南