如何在 rsync 中排除文件?

如何在 rsync 中排除文件?

我正在使用 ubuntu server 12.04,现在我想使用 rsync 备份一些文件,下面是尝试:

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

如你所见,我想备份文件夹中的所有文件$HOME/文档到文件夹$HOME/备份/测试, 但排除文件夹中的文件其他温度但我失败了,rsync 仍然复制了两个排除文件夹中的文件:

ls $HOME/Backups/TEST/another
test

测试是文件夹中的一个文件其他,虽然我在 rsync 中排除了该文件,但它也被复制了,为什么?如何让这些文件真正被排除?

答案1

.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/

答案2

您的 rsync 命令存在几个问题(另请参阅rsync 的手册页(有关过滤规则的详细说明)。

  • --exclude对于任何给定的模式, 我们需要一个命令。
  • 给出的路径需要相对于源路径(没有绝对路径)。
  • 在说明来源和目的地之前,需要给出选项。

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

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

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

相关内容