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

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

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

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

正确的做法是什么?

答案1

要排除多个目录,只需使用多个--exclude=path开关。因此,正确编写的问题命令如下:

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

笔记:使用带有排除的相对路径。路径相对于源目录,此处为 /home/ben。

答案2

当有多个目录和/或文件需要排除时,请创建一个文本文件并使用开关--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

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

答案3

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

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

相关内容