rsync递归,深度有限

时间:2012-09-05 11:57:21

标签: java linux rsync

我有一个小的java应用程序/服务,它使用Java 7的新java.nio.file.WatchService来监视根文件夹及其子文件夹。当新事件发生时(新文件,修改,删除等等)我启动rsync执行以将文件从服务器A复制到服务器B(反之亦然)。该命令使用--delete选项确保从A中删除的文件也从B中删除。但是,为了使用此功能,您必须启用-r(递归子目录)。通常这不是什么大问题,但根文件夹是5GB的数据(19000个文件,1500个文件夹)。 Rsync非常出色,但仍需要几分钟才能运行。

我遇到的问题是,如果两个服务器上的文件几乎同时发生变化,则服务器A上创建的新文件可能会被进程同步B->删除。 A,因为--delete仅将源与目标进行比较,并且看到目标的文件多于源。

由于我已经不情愿地使用Java应用程序查看每个目录,因此我不必对rsync使用-r(递归)。我的第一个想法是用rsync来限制递归的深度,但我不认为这是rsync的一个特性。我还考虑使用--exclude,但不确定模式可能是什么样的。 有人有主意吗?

作为参考,以下是生成的rsync命令的示例:

rsync -r --no-group --no-owner --no-perms --update --checksum --verbose --progress --stats --delete --ignore-errors "/media/server1files/" "/server2::server2"

1 个答案:

答案 0 :(得分:5)

即使使用-r,要排除子文件夹,使用的相应模式为--exclude "/**/*"