我们有 Linux 机器 1 - Directory1(包括所有子目录和文件) 我们有 Linux SFTP 机器 2 - Directory2(包括所有子目录和文件)
我正在寻找一种解决方案/工具,可以仅使用 SFTP 使两个目录保持绝对同步。如果在一侧添加/修改/删除任何文件/文件夹,它应该在另一侧复制它。
我无法使用的解决方案:rsync - 需要 ssh 连接(由于安全问题而不可能) 我尝试过的解决方案 - lftp -> 当只有一台机器正在写入/修改文件/文件夹时,可以顺利进行单向同步。但是当机器 1 / 机器 2 都在写入以及修改/删除时,lftp 工作不稳定。尝试过 Apache Nifi,但这太过分了,寻找更简单的解决方案是可能的。
非常感谢您的帮助!
答案1
在 machine1 上使用find . -type f | sort > files-src.txt
命令生成相关的 directory1 文件名列表。将文件长度和 sha224 文件内容哈希放入该文件或相关文件中。考虑使用 find 的便捷-ls
开关。
请注意,“files-src.txt”将被传输到 machine2 上的directory2。
在 machine2 上生成一个本地“files-dst.txt”文件,仅基于本地文件读取。
现在您可以计算文件 - {src,dst}.txt 之间的差异,类似于rsync
在线上下文中的操作。删除 src 中没有出现的 dst 文件是小菜一碟。接下来,忽略(长度,哈希)与 src 文件匹配的 dst 文件。 (哈希值仅在长度匹配时才能匹配。)最后,安排所有 src 文件的传输,这些文件要么
- 没有相应的 dst 文件,或者
- 有一个散列不匹配的 dst 文件