如何用rsync排除多个目录?

我试图使用rsync备份我的主目录,我想排除一些包含垃圾的目录。 我想特别排除/home/ben/.ccache/home/ben/build 。 不幸的是rsync的文档是信息过载,并没有回答我的问题。 这是我试过的:

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

这样做的正确方法是什么?

好吧,我觉得真的很蠢。 在我发布这个问题之前,我的朋友告诉我该怎么做,这很简单。 要排除多个目录,只需使用多个--exclude=path开关。 所以我上面的命令写得如下:

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

当要排除多个目录和/或文件时,请创建一个文本文件并使用--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表示在/var/spool/lpd任何文件夹中跳过以cf开头的文件

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

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

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