问题描述
我正在尝试在我的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
目录!)。