我正在使用 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
请注意,如果排除模式以 结尾,/
则表示目录。如果同时省略它,则将排除具有该名称的文件和目录。将其替换为通配符*
以排除名称中包含该字符串的所有文件或目录。