Answers:
您在排除列表中提供了绝对路径。
使用rsync时,所有以(exit)开头的排除(或include!)路径/
都将锚定到“ 传输根 ”。
在这种情况下,转移的根源是/home/chris
。如果您这样做:
rsync -Paz --exclude-from 'rsync-exclude.txt' / admin@192.168.1.65:
...那么您的排除项应该起作用了(但是您将复制该文件系统上的所有其他内容!)。
但是由于您只是尝试同步主目录,并且没有/home/chris
named的子目录"home/chris/Downloads"
,所以rsync
找不到匹配的内容。
因此,请尝试/home/chris
从rsync-exclude.txt
文件中删除这些部分。
实际上,您只需要在文件中添加一行:
/Downloads
请注意,如果您未指定前导/
,而您碰巧有其他名为的目录"Downloads"
,则这些目录也将被排除。我假设您只想排除“顶层”目录(相对于源目录,又称“传输根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
当然,原始目录除外!)。
这样做可能会更容易一些,仅注意排除目录和语法:
SRC='/home/username'
DST='/run/media/username/EasyStoreRT/rsync'
rsync -avrh --stats \
--log-file=/home/username/log/rsync-home.log \
--exclude='/username/.cache' \
--exclude='/username/.local/share/Trash' \
$SRC \
$DST \
它将排除那些目录及其中的所有文件。无论出于何种原因,rysnc都没有将/ home / username附加到/.cache。只有home /会自行定位,因此我必须将/ username添加到每个排除的目录中。
手册页说:“如果模式以/开头,那么它将锚定到文件层次结构中的特定位置,否则它将与路径名的末尾匹配。” 但是,该层次结构似乎只是源目录中的第一个目录。我正在使用bash,版本4.4.23(1)-发行版。