如何在Rsync中排除文件和目录

评论 0 浏览 0 2019-02-21

Rsync是一个快速和多功能的命令行工具,它通过远程shell在两个地点之间同步文件和文件夹。

通过Rsync,你可以镜像数据,创建增量备份和在系统之间复制文件。当复制数据时,你可能想根据其名称或位置排除一个或多个文件或目录。

在本教程中,我们将向你展示如何用rsync排除文件和目录。

在开始之前

你应该对rsync的工作原理有基本的了解。

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

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

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

  • 命令行中,使用--exclude选项。
  • 从一个文件中,使用--exclude-from选项。

排除一个特定的文件

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

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

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

排除一个特定的目录

排除一个特定的目录和排除一个文件是一样的,只要把目录的相对路径传给--exclude选项就可以了,如下:

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

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

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

排除多个文件或目录的情况

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

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

如果你喜欢使用单一的--exclude选项,你可以用大括号{}列出你要排除的文件和目录,用逗号隔开,如下图所示。

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

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

下面的命令与上面的命令的作用完全相同。

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

根据一个模式排除多个文件或目录

通过rsync,你也可以根据与文件或目录名称相匹配的模式来排除文件和目录。

例如,要排除所有.jpg的文件,你可以运行。

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

要排除所有其他的文件和目录,除了那些与某个模式相匹配的文件和目录之外,这一点比较棘手。比方说,你想排除所有其他文件和目录,除了以.jpg结尾的文件。

一个选择是使用下面的命令。

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

当使用多个include/exclude选项时,第一个匹配规则适用。

  • --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命令中传递过来的文件)。

总结

在本教程中,你学到了在用Rsync传输数据时如何排除文件和目录。在Rsync用户手册页还有很多关于Rsync的知识。

最后更新2023-03-11
0 个评论
标签