问题描述
我试图使用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
开头的文件
另请参阅手册页上的filter rules部分。
第三种解决方案
您还可以排除大括号内的多个路径:
rsync -arv --exclude={.ccache,build} /home/ben /media/ben/thumbdrive/