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

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

它应该以这种方式自动工作: 每当我从原始文件夹中创建、修改或删除内容时,这些更改应该自动应用到 sync-file。

哪一个是完成这项任务的最佳方法?

BTW: I'm on Ubuntu 12.04

最终目标是有一个独立的实时备份副本,不使用符号链接或挂载。 我使用 Ubuntu One 来同步我的电脑之间的数据,过了一会儿出了问题,我所有的数据在同步过程中丢失了。

So I thought to add a step further to keep a backup copy of my data:

  • 我把我的数据保存在 A 文件夹里
  • 我需要我目前的问题的答案,创建一个单向同步的“文件夹 A”到“文件夹 B”(cron一个脚本与 rsync?可能是?).我需要它是单向的,只有从 A 到 B 任何对 B 的改变都不能应用到 A。
  • 我只是保持同步的“文件夹 B”与 UbuntuOne

    In this manner any change in A will be appled to B, which will be detected from U1 and synchronized to the cloud. If anything goes wrong and U1 delete my data on B, I always have them on A.

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

你觉得怎么样? 如何知道 rsync 何时结束?

147735 次浏览

你需要这样的东西: Https://github.com/axkibe/lsyncd 它是一个结合了 rsync 和 inotify 的工具——前者是一个镜像工具,设置了正确的选项,镜像到最后一位的目录。后者告诉内核通知程序目录 ot 文件的更改。 上面写着:

它在几秒钟内聚合和组合事件,然后生成一个(或多个)进程来同步更改。

但是,根据 https://www.digitalocean.com/community/tutorials/how-to-mirror-local-and-remote-directories-on-a-vps-with-lsyncd的数字海洋-它应该在 Ubuntu 库!

我有类似的要求,这个工具,我还没有尝试,似乎适合的任务。

您可以使用 inotifywait(启用 modify,create,delete,move标志)和 rsync

while inotifywait -r -e modify,create,delete,move /directory; do
rsync -avz /directory /target
done

如果系统上没有 inotifywait,运行 sudo apt-get install inotify-tools

只需简单修改@silgon 的回答:

while true; do
inotifywait -r -e modify,create,delete /directory
rsync -avz /directory /target
done

(@silgon 版本有时会在 Ubuntu16上崩溃,如果你用 cron 运行的话)

你可以利用 交易所。这是一个 Linux 文件系统更改通知。源代码可以从上面的链接下载,你可以自己编译。fschange可以通过从 proc 文件(/proc/fschange)读取数据来跟踪文件更改。当数据写入文件时,fschange 报告修改的确切时间间隔,而不仅仅是说文件已经修改。 If you are looking for the more advanced solution, I would suggest checking Resilio Connect. 它是跨平台的,为使用和监视提供了扩展的选项。因为它是基于 BitTorrent 的,所以它比其他任何现有的同步工具都要快。这是以他们的名义写的。

我使用这个免费程序来同步本地文件和目录: https://github.com/Fitus/Zaloha.sh

好处是: 它是一个 bash shell 脚本(只有一个文件)。不像其他程序那样是个黑匣子。文件也在那里。此外,利用一些技术人才,你可以“弯曲”和“集成”它来创建你喜欢的最终解决方案。

使用跨平台 fswatchrsync:

fswatch -o /src | xargs -n1 -I{} rsync -a /src /dest