如何使用rsync排除多个目录?


184

我正在尝试使用rsync备份主目录,并且我想排除一些包含垃圾内容的目录。我想专门排除/home/ben/.ccache/home/ben/build。不幸的是,rsync的文档信息过多,无法回答我的问题。这是我尝试的:

rsync -arv --exclude "/home/ben/.ccache:/home/ben/build" /home/ben /media/ben/thumbdrive/

什么是正确的方法?


4
只是想说那面旗帜已经a暗示着r:)-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
Populus

Answers:


238

好吧,我真的很傻。在我发布这个问题之前,我的朋友向我展示了如何做,这确实很简单。要排除多个目录,您只需使用多个--exclude=path开关。所以我上面的命令正确编写如下:

rsync -arv --exclude=.ccache --exclude=build /home/ben /media/ben/thumbdrive/

7
绝对路径并没有为我(指定为默默不排除目录)工作,而相对于源目录的路径工作正常。也许我缺少了一些东西,但是对于@FreeSoftwareServers断言绝对路径始终有效的断言,我会持谨慎态度。
索伦·比约恩斯塔德

5
仅供参考:该选项-a包括,-r因此-ar是多余的。
大卫,

4
与FreeSoftwareServers认为的相反,排除路径是相对于源路径而非/的。因此,该注释绝对是错误的,如果您遵循它,将会导致失败。最好的策略是不使用前导/排除,以免出现这种类型的精神错误。如果将源称为/ home / me,并且如果您排除='/ mydir /',则这将排除/ home / me中的目录mydir,也就是说,它将排除/中的/ home / me / mydir NOT / mydir /。不幸的是,由于技术上的错误并会误导我,所以我无法投票或编辑该评论。
Lizardx

3
仅供参考,供以后的旅行者使用,看来@FreeSoftwareServer中有问题的评论已被删除。TL; DR:使用相对路径
Freedom_Ben

2
如果您很笨,那么我和其他179位支持者也一样!
Sridhar Sarnobat

108

当要排除多个目录和/或文件时,请制作一个文本文件并使用--exclude-from开关。制作一个名为的文件,exclude_me.txt并在其中列出您的排除项。范例(/home/ben/exclude_me.txt):

.ccache
build
.java
.gvfs
.xsession-errors

然后您的rsync看起来像这样:

rsync -arv --exclude-from='/home/ben/exclude_me.txt' /home/ben /media/ben/thumbdrive/

这是有关过滤规则的一些信息,可能会有所帮助:

  • /dir/ 表示排除根文件夹 /dir
  • /dir/*表示获取根文件夹,/dir但不获取目录
  • dir/ 表示排除名称所在的任何文件夹 dir/

  • 排除的示例:/dir/, /usr/share/directory/, /var/spool/dir/ /var/spool/lpd/cf表示跳过文件中以cf任何文件夹开头的文件/var/spool/lpd

另请参见手册页上的过滤器规则部分。


4
重要的是要注意,根文件夹是指传输根,而不是根目录。
jamesdlin

这是一个绝妙的答案!
亚历山大·朱可夫

85

您还可以在花括号中排除多个路径:

rsync -arv --exclude={.ccache,build} /home/ben /media/ben/thumbdrive/

40
这很好用,只是不在sh下,只有在bash下,我发现了“困难的方法”
xor 2015年

7
逗号后没有空格。据悉,该硬盘的方式太😭
styl3r

不要使用“”像--exclude =” GVFS'
马丁T.

FWIW,我认为花括号可以和ksh一起使用。对于其他Shell,您可能会使用类似:IFS=$'\n'; rsync -arv $(printf '.ccache\nbuild\n' | sed 's/^/--exclude=/g') /home/ben /media/ben/thumbdrive/。或者,您可以只使用多个--exclude参数,而必须手动输入。
TSJNachos117

1
之所以起作用,是因为“括号扩展”,以防万一有人想看细节。
shredalert
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.