Answers:
好吧,我真的很傻。在我发布这个问题之前,我的朋友向我展示了如何做,这确实很简单。要排除多个目录,您只需使用多个--exclude=path
开关。所以我上面的命令正确编写如下:
rsync -arv --exclude=.ccache --exclude=build /home/ben /media/ben/thumbdrive/
-a
包括,-r
因此-ar
是多余的。
当要排除多个目录和/或文件时,请制作一个文本文件并使用--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
另请参见手册页上的过滤器规则部分。
您还可以在花括号中排除多个路径:
rsync -arv --exclude={.ccache,build} /home/ben /media/ben/thumbdrive/
IFS=$'\n'; rsync -arv $(printf '.ccache\nbuild\n' | sed 's/^/--exclude=/g') /home/ben /media/ben/thumbdrive/
。或者,您可以只使用多个--exclude
参数,而必须手动输入。
a
暗示着r
:)-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)