如何在rsync中排除文件?


12

我正在使用ubuntu服务器12.04,现在我想使用rsync备份一些文件,这是一个尝试:

rsync -aAX $HOME/Documents/* $HOME/Backups/TEST --exclude={$HOME/Documents/another/*,$HOME/Documents/temp/*} 

如您所见,我要将$ HOME / Documents文件夹中的所有文件备份到$ HOME / Backups / TEST文件夹中,但另一个文件夹和temp中的文件排除在外。但我失败了,rsync仍将文件复制到两个排除的文件夹中:

ls $HOME/Backups/TEST/another
test

测试是在文件夹中的文件,另一个,它也被复制,虽然我排除rsync的文件,为什么呢?如何让那些文件实际上被排除在外?

Answers:


11

rsync命令有几个问题(有关过滤器规则的详细说明,请参见rsync的联机帮助页)。

  • --exclude对于任何给定的模式,我们每个都需要一个命令。
  • 给定的路径必须相对于源路径(无绝对路径)。
  • 在陈述源和目标之前,需要给出选项。

对于您的示例,以下语法将起作用:

rsync -avAX --exclude=another/ --exclude=temp/ ~/Documents/ ~/Backups/TEST

请注意,如果排除模式/以其结尾,则表示目录。如果您都省略它,则具有该名称的文件和目录将被排除。将其替换为通配符*可排除名称中带有该字符串的所有文件或目录。


6
这并不完全正确。我不确定它是如何工作的,但是从实验来看,--exclude=/foo它将foo直接在源代码中排除该目录,但是--exclude=foo将排除所有名为foo的目录,即使在子目录中也是如此。
Sparhawk

10

您可能会发现将.rsync-filter文件添加到源目录中并使用该-F选项更加容易。

从手册页:

-F:-F选项是此规则的简写:[...]

 --filter='dir-merge /.rsync-filter'

这告诉rsync查找已散布在层次结构中的按目录的.rsync-filter文件,并使用其规则来过滤传输中的文件。

例如:在$ HOME / Documents / .rsync-filter中

# you can add comments in filter files

- /another/
- /temp/

相反-,您也可以写整个单词exclude

现在你可以

rsync -aAX -F $HOME/Documents/ $HOME/Backups/TEST/
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.