如何从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-exclude.txt
文件中删除/home/chris
部分。
实际上,你应该在文件中只需要一行:
/Downloads
注意 :如果您没有指定前导/
,并且您有一个名为/home/chris/special-stuff/Downloads
,那么也会将其排除在外。 我假设您只想排除您的“顶级”(相对于源目录,又称“传输根”) Downloads
目录,因此您需要领先/
。
顺便提一下,如果您(文件中)只有(仅)行/Downloads/*
,它将确保目标上存在 Downloads
目录,但不会复制其任何内容!
实际上,如果您只需要排除一个目录,那么执行此操作似乎更容易(根本没有排除文件):
rsync -Paz --exclude /Downloads /home/chris/ admin@192.168.1.65:LinuxHome
我知道你做对了,但rsync的新手应该注意/home/chris/
末尾的斜杠。 引用rsync
手册页,“你可以认为一个源的尾随/意思是’复制这个目录的内容’,而不是’按名称复制目录’。” 因此,如果你不使用这个尾部斜杠,你最终会在目标目录中找到一个名为chris
的目录,其中包含/home/chris
中的所有内容(当然,除了原始的Downloads
目录之外)。