我想要一个文件夹的同步副本及其所有子树。
它应该以这种方式自动运行:每当我创建,修改或删除原始文件夹中的内容时,这些更改都应自动应用于sync-folder。
这项任务的最佳方法是什么?
BTW:我在Ubuntu 12.04
最终目标是拥有一个独立的实时备份副本,而无需使用符号链接或mount。 我使用Ubuntu One来同步我的计算机之间的数据,一段时间后出现问题,并且在同步过程中我的所有数据都丢失了。
所以我想进一步增加一步来保存我的数据的备份副本:
cron
一个带rsync
的脚本?可能是?)。我需要它只是从A到B的单向方式。对B的任何更改都不能应用于A. 受到lanzz评论的启发,另一个想法可能是在启动时运行rsync以备份Ubuntu One下的文件夹内容,并在rsync完成后启动Ubuntu One。
你怎么看? 如何知道rsync何时结束?
答案 0 :(得分:53)
您可以使用inotifywait
(启用modify,create,delete
标志)和rsync
。
while inotifywait -r -e modify,create,delete /directory; do
rsync -avz /directory /target
done
答案 1 :(得分:14)
你需要这样的东西: https://github.com/axkibe/lsyncd 它是一个结合了rsync和inotify的工具 - 前者是一个工具,它使用正确的选项集镜像最后一位的目录。后者告诉内核通知程序目录ot文件的更改。 它说:
它聚合并组合事件几秒钟,然后生成一个(或多个)进程以同步更改。
但是 - 根据Digital Ocean在https://www.digitalocean.com/community/tutorials/how-to-mirror-local-and-remote-directories-on-a-vps-with-lsyncd - 它应该在Ubuntu存储库中!
我有类似的要求,我还没试过的这个工具似乎适合这项任务。
答案 2 :(得分:1)
@silgon答案的简单修改:
while true; do
inotifywait -r -e modify,create,delete /directory
rsync -avz /directory /target
done
(如果在cron中运行,@ silgon版本有时会在Ubuntu 16上崩溃)
答案 3 :(得分:0)
您可以利用fschange。这是Linux文件系统更改通知。可从上面的链接下载源代码,您可以自己编译。 fschange
可用于通过从proc文件(/ proc / fschange)读取数据来跟踪文件更改。将数据写入文件时,fschange会报告已修改的确切时间间隔,而不仅仅是说文件已被更改。
如果您正在寻找更高级的解决方案,建议您选择Resilio Connect。
它是跨平台的,提供了扩展的使用和监视选项。由于它是基于BitTorrent的,因此比任何其他现有同步工具都快。它是代表他们写的。
答案 4 :(得分:0)
我使用这个免费程序来同步本地文件和目录:https://github.com/Fitus/Zaloha.sh。该存储库还包含一个简单的演示。
优点:它是一个bash shell脚本(仅一个文件)。没有其他程序那样的黑匣子。文档也在那里。此外,您可以借助一些技术人才,将其“弯曲”和“整合”,以创建所需的最终解决方案。