使用rsync复制文件时过滤文件
1. 概述
Linux rsync 命令行实用程序允许我们复制和删除磁盘上的文件。在本教程中,我们将看到如何为命令提供允许我们仅复制某些类型的文件的选项。
2. rsync
通常,我们使用rsync来同步 Linux 文件系统上的源目录和目标目录。这些目录要么在我们的主机本地,要么位于远程主机上。
最终,为了实现平等,该命令将仅将每个文件所需的部分复制到一个位置或从一个位置复制到下一个位置,具体取决于我们如何运行它。出于这个原因,rsync通常是传输文件的首选方式,因为它移动的数据量最少。因此,这可以非常快速地将文件复制到远程主机。
3. 使用include选项
如果我们想限制rsync传输的文件,我们可以使用include命令行选项。顾名思义,此选项将根据提供的值过滤传输的文件并包含文件。但是,** include选项只能与exclude选项一起使用。**这是因为rsync的默认操作是包含源目录中的所有内容。
假设我们只想传输当前目录中的文本文件。我们只需要提供包含过滤器并使用带通配符的排除:
rsync --include=*.txt --exclude=* /source/* /destination/
在这里,我们选项的顺序非常重要。**这两个选项都是过滤器,它们按顺序应用。**因此,我们必须首先使用代表我们想要的文件的过滤器,然后排除所有内容。应用时,这意味着选择所有文本文件进行传输,然后排除任何其他文件。
现在,如果我们要传输文本和日志文件,我们必须为每个文件使用一个include选项,同样在exclude 选项之前:
rsync --include=*.txt --include=*.log --exclude=* /source/* /destination/
最后,为了传输在我们所有子目录中匹配的所有文件,我们告诉命令使用*-a和-r*选项进行递归:
rsync -ar --include=*/ include=*.txt --exclude=* /source/* /destination/
但是,这有可能复制所有子目录(没有文件),因此我们还必须使用*–prune-empty-dirs* 或*-m*选项来防止这种情况发生:
rsync --ar --prune-empty-dirs --include=*/ include=*.txt --exclude=* /source/* /destination/
4. 版本和变体
本教程基于3.2.3版本。最新版本的rsync始终可在这里 获得。
include和exclude过滤器选项的顺序以及它们的应用方式取决于版本。早期版本可能无法按照本教程中的说明处理文件。但是,3.0.5 之后的版本应该可以按照我们的预期运行。