如何让两个文件夹自动同步?

时间:2012-09-17 13:29:14

标签: bash synchronization

我想要一个文件夹的同步副本及其所有子树。

它应该以这种方式自动运行:每当我创建,修改或删除原始文件夹中的内容时,这些更改都应自动应用于sync-folder。

这项任务的最佳方法是什么?

BTW:我在Ubuntu 12.04

最终目标是拥有一个独立的实时备份副本,而无需使用符号链接或mount。 我使用Ubuntu One来同步我的计算机之间的数据,一段时间后出现问题,并且在同步过程中我的所有数据都丢失了。

所以我想进一步增加一步来保存我的数据的备份副本:

  • 我将数据存储在“文件夹A”
  • 我需要当前问题的答案来创建“文件夹A”到“文件夹B”的单向同步(cron一个带rsync的脚本?可能是?)。我需要它只是从A到B的单向方式。对B的任何更改都不能应用于A.
  • 我只是将“文件夹B”与Ubuntu One保持同步
    以这种方式,A中的任何变化将被应用于B,其将从U1检测并且同步到云。如果出现任何问题并且U1删除了我在B上的数据,我总是将它们放在A上。

受到lanzz评论的启发,另一个想法可能是在启动时运行rsync以备份Ubuntu One下的文件夹内容,并在rsync完成后启动Ubuntu One。

你怎么看? 如何知道rsync何时结束?

5 个答案:

答案 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脚本(仅一个文件)。没有其他程序那样的黑匣子。文档也在那里。此外,您可以借助一些技术人才,将其“弯曲”和“整合”,以创建所需的最终解决方案。

相关问题