Bash 如何保持两个文件夹自动同步?
我想要一个文件夹及其所有子树的同步副本 它应该以这种方式自动工作:每当我从原始文件夹中创建、修改或删除内容时,这些更改都应该自动应用于同步文件夹 完成此任务的最佳方法是什么?Bash 如何保持两个文件夹自动同步?,bash,synchronization,Bash,Synchronization,我想要一个文件夹及其所有子树的同步副本 它应该以这种方式自动工作:每当我从原始文件夹中创建、修改或删除内容时,这些更改都应该自动应用于同步文件夹 完成此任务的最佳方法是什么? 顺便说一句:我在Ubuntu 12.04上 最终目标是拥有一个独立的实时备份拷贝,而不使用符号链接或挂载。 我使用UbuntuOne在我的计算机之间同步数据,过了一段时间,出现了一些问题,在同步过程中我所有的数据都丢失了 因此,我想进一步添加一个步骤来保留数据的备份副本: 我将数据存储在“文件夹a”中 我需要当前问题的答
顺便说一句:我在Ubuntu 12.04上 最终目标是拥有一个独立的实时备份拷贝,而不使用符号链接或挂载。 我使用UbuntuOne在我的计算机之间同步数据,过了一段时间,出现了一些问题,在同步过程中我所有的数据都丢失了 因此,我想进一步添加一个步骤来保留数据的备份副本:
- 我将数据存储在“文件夹a”中
- 我需要当前问题的答案来创建“文件夹a”到“文件夹B”的单向同步(
rsync的脚本可能是?)。我需要它是单向的,只能从A到B,对B的任何更改都不能应用于Acron
- 我只是将“文件夹B”与Ubuntu One保持同步
以这种方式,A中的任何更改都将应用于B,B将从U1检测并同步到云。如果出了什么问题,U1删除了我在B上的数据,我总是把它们放在A上
如何知道rsync何时结束?您需要这样的信息: 它是一个结合了rsync和inotify的工具,前者是一个通过正确的选项集将目录镜像到最后一位的工具。后者告诉内核通知程序对目录ot文件的更改。 它说: 它聚合并组合事件几秒钟,然后生成一个(或多个)进程来同步更改 但是,根据Digital Ocean at的说法,它应该在Ubuntu存储库中
我有类似的要求,这个工具(我还没有尝试过)似乎适合这个任务。您可以使用
inotifywait
(启用修改、创建、删除、移动
标志)和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版本有时在Ubuntu 16上崩溃,如果你在cron中运行它)你可以利用它。这是一个Linux文件系统更改通知。源代码可以从上面的链接下载,您可以自己编译fschange
可以通过从proc文件(/proc/fschange)读取数据来跟踪文件更改。当数据写入文件时,fschange报告已修改的确切时间间隔,而不仅仅是说文件已更改。
如果您正在寻找更高级的解决方案,我建议您检查一下。
它是跨平台的,提供了扩展的使用和监视选项。因为它是基于BitTorrent的,所以比任何其他现有的同步工具都要快。这是代表他们写的 我使用此免费程序同步本地文件和目录:。存储库还包含一个简单的演示
优点:它是一个bashshell脚本(仅一个文件)。不像其他程序那样是一个黑匣子。文件也在那里。此外,借助一些技术人才,您可以“弯曲”和“集成”it,以创建您喜欢的最终解决方案。您想实现什么?文件夹真的需要分开吗?你不能将一个名称符号链接到另一个名称,或者将目录符号链接到辅助位置吗?另外,请看一下。我建议不要进行实际的实时同步(即持续监视源目录中的文件更改)通过CRON支持定期<代码> RSYNC 。您可能需要考虑添加<代码> -E SSH。user@remote:/target到
rsync
如果您想使用SSH作为传输来访问远程计算机。感谢@Falcon,我通常使用rsync-avz--delete--exclude from=.rsyncignore/目录user@server:路径
。不过,我想写一个简单的答案。澄清:这是一次性运行的东西,还是将它添加到BasHC或什么?您可以将整个while循环视为需要时同步的过程。我通常将其添加到我正在处理的项目的Makefile中。这样我就可以选择服务器和我想要保存的目录。我的一个使用案例是,我在笔记本电脑中编写深度学习算法,并将其同步,以便在具有更好CPU和GPU的专用计算机上执行繁重的过程。我还排除了我不需要的文件,例如.git
文件夹。这不处理文件重命名,使用修改、创建、删除、移动
lsyncd起初看起来像是一颗银弹,但它有,而且显然macOS实现“陈旧过时”。我无法让它在10.12上运行。@apaidnerd公平地说,90期未结,420期未结。尽管如此,去年只有10/40的问题被解决了。你为什么要在cron中运行它呢?@saygley,在Ubuntu重新启动后,同步过程应该自动运行。我看。。然而,由于这通常应该启动一次,并且只要服务器启动就可以运行;我会考虑在R.C.Curror中内联的一些东西。我包含了<代码>睡眠15m < /代码>,您可以看到日志记录的更改。