当前位置: 首页>>技术教程>>正文


如何从rsync中排除文件夹

,

问题描述

我正在尝试在我的NAS驱动器上备份我的主文件夹。我这样说:

rsync -Paz --exclude-from 'rsync-exclude.txt' /home/chris/ admin@192.168.1.65:LinuxHome

其中rsync-exclude.txt有这样的内容:

/home/chris/Downloads/*
/home/chris/Downloads/
/home/chris/Downloads/*.*

它在我执行rsync(主文件夹)的同一文件夹中。

但是,rsync也会尝试复制此文件夹。

我究竟做错了什么?

最佳解决办法

您在排除列表中提供绝对路径。

使用rsync,以/开头的所有排除(或包含!)路径都锚定到“传输根”。

在这种情况下,转移的根源是/home/chris。如果你这样做:

rsync -Paz --exclude-from 'rsync-exclude.txt' / admin@192.168.1.65:

…那么你的排除项应该有效(但你要复制该文件系统上的所有其他内容!)。

但由于您只是尝试同步主目录,并且没有名为"home/chris/Downloads"/home/chris子目录,因此rsync找不到任何匹配项。

因此,请尝试从rsync-exclude.txt文件中删除/home/chris部件。

实际上,你应该在文件中只需要一行:

/Downloads

请注意,如果您未指定前导/,并且您碰巧有其他名为"Downloads"的目录,那么这些目录也将被排除。我假设您只想排除您的”top-level”(相对于源目录,又称“传输根”)Downloads目录,因此您需要领先的/

最简单的方法(只排除几条路径)

如果您只需要排除一个目录,只需执行此操作(避免单独的文件):

rsync -Paz --exclude /Downloads /home/chris/ admin@192.168.1.65:LinuxHome

您也可以将--exclude标签链接在一起,如下所示:

rsync -Paz --exclude /Downloads --exclude '/Something Else' --exclude .hiddenFile /home/chris/ admin@192.168.1.65:LinuxHome

请注意,由于没有斜杠,因此将从其复制的每个目录中排除.hiddenFile

但如果您有多个排除项,那么最好使用--exclude-from和文件。

注意

我看到你做对了,但rsync的新手应该注意/home/chris/末尾的斜线

引用rsync手册页,“您可以将源尾部/上限视为’复制此目录的内容’,而不是’按名称复制目录’。”

因此,如果您不使用该斜杠,您最终会在目标目录中找到一个名为chris的目录,其中包含/home/chris的所有内容(当然,除了原始的Downloads目录!)。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1682.html,未经允许,请勿转载。