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

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

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

顺便说一句:我在 Ubuntu 12.04

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

所以我想进一步添加一个步骤来保留我的数据的备份副本:

  • 我将我的数据存储在“文件夹 A”中
  • 我需要我的当前问题的答案创建的“文件夹中的”单向同步到“文件夹B”( cron使用脚本rsync ?可能是?)。 我需要它只是从 A 到 B 的单向,对 B 的任何更改都不能应用于 A。
  • 我只是将“文件夹 B”与 Ubuntu One 保持同步

    通过这种方式,A 中的任何更改都将应用到 B,B 将从 U1 检测到并同步到云。 如果出现任何问题并且 U1 删除我在 B 上的数据,我总是将它们放在 A 上。

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

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

#1楼 票数:113

您可以使用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

#2楼 票数:27

你需要这样的东西: 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上的 Digital Ocean - 它应该在Ubuntu 存储库!

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

#3楼 票数:10

只是对@silgon 答案的简单修改:

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

(@silgon 版本有时会在 Ubuntu 16 上崩溃,如果你在 cron 中运行它)

#4楼 票数:2

您可以利用fschange 这是一个 Linux 文件系统更改通知。 源代码可以从上面的链接下载,你可以自己编译。 fschange可用于通过从 proc 文件 (/proc/fschange) 读取数据来跟踪文件更改。 将数据写入文件时,fschange 会报告已修改的确切时间间隔,而不仅仅是说明文件已更改。 如果您正在寻找更高级的解决方案,我建议您查看Resilio Connect 它是跨平台的,为使用和监控提供了扩展选项。 因为它是基于 BitTorrent 的,所以它比任何其他现有的同步工具都要快。 这是代表他们写的。

#5楼 票数:1

我使用这个免费程序来同步本地文件和目录: https : //github.com/Fitus/Zaloha.sh 该存储库还包含一个简单的演示。

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

  ask by Luca Borrione translate from so

未解决问题?本站智能推荐:

1回复

使用crontab bash脚本通过FTP自动将本地文件夹同步到远程文件夹,而无需发送本地打开文件

我正在尝试使用从Linux crontab脚本启动的一些FTP客户端并行会话(LFTP)将本地文件夹同步到远程文件夹。 一些计算作业会生成文件(并保存在本地目录中),这些文件将被发送到FTP服务器。 我需要验证保存在本地目录中的新文件是否仍未被前面提到的保存过程打开,以便仅发送已关闭的文件。
1回复

从dir1和dir2同步,并保持两个目录相同

我想从源目录同步到本地目录,我曾经使用命令: rsync -av /path1/dir1 /path2/dir2 ,它将dir1的内容添加到dir2。 但是,我要保持dir1和dir2相同。 我不希望其他人可以在不使用rsync命令的情况下将文件添加到dir2中(意味着要从dir1同步到
3回复

保持主目录与Linux Box同步

我有两台服务器,计算机A和计算机B,都运行Linux。 我需要编写一个程序或Shell脚本来连续监视计算机A上主目录的内容,如果有任何更改,请将更改复制到计算机B上的主目录中,以便两个主目录始终相同。 (对计算机B上的主目录所做的任何更改都可以安全地忽略。)
3回复

在Mac OSX计算机和Linux计算机之间自动同步目录/文件修改的脚本

我的Mac上有一些源代码,为了进行测试,我想将其与包含与生产环境类似的Web服务器设置的VM进行同步。 因此,我需要能够在每次更改时自动将文件复制到VM。 我知道无论何时运行脚本,我都可以使用rsync手动执行此操作,但是每次修改特定目录或其子目录之一中的文件时,我都需要某种方式使其在后
1回复

两个进程写入一个文件,防止混合输出

我想从两个进程获取输出并将它们合并到一个文件中,如: 问题是输出可能在最终文件中混淆。 例如,如果第一个进程写入: hellow 第二个过程写道: 再见 结果可能是这样的: hebylloe 但我希望它们处于单独的行中(顺序并不重要
3回复

如何从多个脚本同步(锁定/解锁)对bash中文件的访问?

我正在编写将并行运行的脚本,这些脚本将从同一文件中获取输入数据。 这些脚本将打开输入文件,读取第一行,将其存储以进行进一步处理,最后从输入文件中删除此读取行。 现在的问题是,多个脚本访问文件可能会导致以下情况:两个脚本同时访问输入文件并读取同一行,这将导致该行被处理两次,这是不可接受的结
1回复

如何将OMV(OpenMediaVault)的文件系统与Owncloud数据库同步

我正在使用OMV(Openmediavault)和Owncloud安装程序运行debian。 我想将文件系统树与Owncloud的数据库同步。 因为OMV可以更改文件而无需Owncloud更新数据库。 我在考虑一个bash脚本。 当我创建删除或移动文件时,需要在Owncloud的数据
1回复

启动以bash同步的程序

我只是想做的就是等待释放锁。 例如,我有4个(因为我有4个核心)相同的脚本,每个脚本都在项目的一部分上工作,每个脚本看起来像这样: 当我运行调用四个脚本的主脚本时,我希望每个脚本都能独立工作,但是在某个时候,我希望每个脚本都在等待,因为下一部分需要第一部分中的所有数据。 现在