我尝试以下命令 rsync -av --progress --inplace --rsh='ssh'/home/tom/workspace/myapp.war root@172.241.181.124:/home/rtom/uploads
但是,当我在应用程序中进行小的更改以重新生成 myapp.war 时,每次执行命令时,它似乎都会再次传输整个文件。
我还希望在连接丢失时自动恢复连接。我认为这部分工作正常。
传输应该通过 ssh 进行。
连接速度非常慢,也可能会中断,因此仅传输已更改的内容很重要。当然,它还必须确保文件已正确传输。
最佳答案
rsync
确实可以有效地处理文件中相对较小的更改和部分上传。在 rsync algorithm 方面做出了重大努力朝着这个方向。
问题是 WAR 文件是“扩展的”JAR 文件,它们本质上是 ZIP 存档,因此是压缩的。
未压缩文件中的微小变化会改变该文件所属的整个压缩段,而且 - 最重要的是 - 它还会显着改变其大小。这可以克服 rsync
检测和处理最终压缩文件中更改的能力。
在 ZIP 存档中,每个未压缩的文件都有自己的压缩段。因此,文件在存档中的顺序对于实现与先前版本的相似度也很重要。根据 WAR 文件的创建方式,仅添加一个新文件或重命名一个文件可能会导致段移动,从根本上使 WAR 文件无法识别。换句话说:
您的应用程序中的一个小更改通常意味着您的 WAR 文件中有相当大的更改。
rsync
并非设计用于处理压缩文件中的更改。但是,它可以处理应用程序中的更改。一种解决方案是使用它来上传您的应用程序文件,然后在远程主机上创建 WAR 文件。
一种略有不同的方法——不需要远程主机上的任何开发工具——是在本地解压缩(即解压缩)WAR 文件,上传其内容,然后在远程主机上再次打包(即压缩)它。此解决方案仅需要在远程主机上执行 zip
或 jar
。
关于linux - 如何通过自动恢复将大文件从本地传输到远程框并仅传输已更改的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4478648/