当前位置: 首页>>技术教程>>正文


如何用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开头的文件

另请参阅手册页上的filter rules部分。

第三种解决方案

您还可以排除大括号内的多个路径:

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/506.html,未经允许,请勿转载。