Rsync同步文件时如何排除文件

请关注本头条号,每天坚持更新原创干货技术文章。
如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习

1. 前言

本文主要讲解使用Rsync同步文件时如何排除指定文件夹或多个目录。

Rsync是一个快速且通用的命令行实用程序,可以在远程shell上的两个服务器之间同步文件或者文件夹。

Rsync同步文件时如何排除文件

Rsync同步文件时如何排除指定文件夹或多个目录

使用Rsync,您可以镜像数据、创建增量备份并在系统之间复制或同步文件。在复制或同步数据时,您可能希望指定一个或多个文件或目录的名称或位置来排除它们。

在本教程中,我们将向您展示如何使用rsync排除指定文件、指定目录、多个目录。

2. 实施前的准备工具

在Rsync同步文件时如何排除指定文件夹或多个目录?需要提前做以下准备

您应该对rsync的工作原理有一个基本的了解。

在下面的示例中,我们将使用rsync和-a选项。这告诉rsync递归地同步目录,传输特殊和块设备,并保存符号链接、修改时间、组、所有权和权限。

当排除文件或目录时,需要使用它们到源目录的相对路径。

有两个选项可以指定要排除的文件和目录:

在命令行中,使用--exclude选项。

从文件中使用--exclude-from选项。

3. Rsync同步文件时排除指定文件

要排除特定文件,请将文件的相对路径传递给--exclude选项。

Rsync同步文件时如何排除文件

Rsync同步文件时排除指定文件

在下面的例子中,文件src_directory/file.txt不会被传输:

rsync -a --exclude 'file.txt' src_directory/ dst_directory/

4. Rsync同步文件时排除指定文件夹或目录

排除特定目录与排除文件相同,只需将目录的相对路径传递给--exclude选项,如下图所示:

rsync -a --exclude 'dir1' src_directory/ dst_directory/
Rsync同步文件时如何排除文件

Rsync同步文件时排除指定文件夹或目录

如果你想排除目录内容,但不是目录本身,请使用dir1/*代替dir1:

rsync -a --exclude 'dir1/*' src_directory/ dst_directory/

5. Rsync排除多个文件或目录

要排除多个文件或目录,只需指定多个--exclude选项:

rsync -a --exclude 'file1.txt' --exclude 'dir1/*' --exclude 'dir2' src_directory/ dst_directory/

如果您喜欢使用--exclude选项,您可以用括号{}列出您想要排除的文件和目录,中间用逗号隔开,如下所示:

排除file1.txt,排除目录dir/*,排除目录dir2

rsync -a --exclude={'file1.txt','dir1/*','dir2'} src_directory/ dst_directory/

如果要排除的文件或者目录的数量很大,可以在一个文件中指定要排除的文件和目录,并将文件传递给exclude-from选项,而不是使用多个--exclude选项。

下面的命令与上面的命令完全相同:

rsync -a --exclude-from='exclude-file.txt' src_directory/ dst_directory/

编辑exclude-file.txt文件

vi exclude-file.txt

加入以下内容,指定要排除的多个文件或者多个文件夹或者目录:

file1.txt
dir1/*
dir2

6. 基于一个模式排除多个文件或目录

Rsync同步文件时如何排除文件

基于一个模式排除多个文件或目录

使用rsync,您还可以基于匹配文件或目录名称的模式排除文件和目录。

例如,rsync要排除同步复制.jpg图片文件执行以下命令:

rsync -a --exclude '*.jpg*' src_directory/ dst_directory/

排除除匹配特定模式的文件和目录之外的所有其他文件和目录要稍微复杂一些。假设您只想排除除了.jpg结尾的文件之外的所有其他文件和目录。

一种选择是使用以下命令:

rsync -a -m --include='*.jpg' --include='*/' --exclude='*' src_directory/ dst_directory/

当使用多个包含/排除选项时,应用第一个匹配规则。

--include='*.jpg' - 首先,我们应该包括所有的.jpg 文件。
--include='*/' - 然后我们指定包含src_directory目录中的所有目录。没有这个,rsync将只复制顶层目录中的*.jpg文件。
-m - 移除空目录

另一个选项是通过管道将find命令的输出传输到rsync:

find src_directory/ -name "*.jpg" -printf %P\\\\0\\\\n | rsync -a --files-from=- src_directory/ dst_directory/

-printf %P\\\\0\\\\n - 将从文件路径中删除src_directory/。


--files-from=- - 意味着只包含来自标准输入的文件(从find命令传递的文件)。

7. 总结

在本教程中,您学习了如何在使用Rsync传输数据或者同步文件时排除指定文件和目录或者多个文件多个目录。在Rsync用户手册页面上有更多关于Rsync的内容。

本文已同步至博客站,尊重原创,转载时请在正文中附带以下链接:
https://www.linuxrumen.com/rmxx/1426.html
点击了解更多,快速查看更多的技术文章列表。


分享到:


相關文章: