linux - 如何通过自动恢复将大文件从本地传输到远程框并仅传输已更改的内容?

标签 linux networking

我尝试以下命令 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 文件,上传其内容,然后在远程主机上再次打包(即压缩)它。此解决方案仅需要在远程主机上执行 zipjar

关于linux - 如何通过自动恢复将大文件从本地传输到远程框并仅传输已更改的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4478648/

相关文章:

node.js - 在 linux 中运行 "Hello World" Electron 应用程序

python - 导入错误: cannot import name Weather even though i had installed the weather-api

c - 我在下面的行中收到错误。怎样才能纠正呢?还是我实现错误的方式?

networking - 我可以使用 100 Mbps 网络交换机进行 Hadoop 迷你集群设置吗?

c# - 媒体播放器 c# 从网络播放

C#如何处理从android上传到C#的多部分文件

linux - 如何对父目录在 $PATH 中的 bash 脚本进行 sudo?

c - 将 CPU 亲和性设置为进程 - C - Linux

linux - 编辑文件时保留 samba 共享的文件权限

java - HTTPUrlConnection 为 Linux 返回 400 但适用于 Windows