![传输完成后如何处理一系列文件](https://linux22.com/image/139432/%E4%BC%A0%E8%BE%93%E5%AE%8C%E6%88%90%E5%90%8E%E5%A6%82%E4%BD%95%E5%A4%84%E7%90%86%E4%B8%80%E7%B3%BB%E5%88%97%E6%96%87%E4%BB%B6.png)
我拥有的
我有 2 台服务器。让我们称呼他们为sen.der
和recei.ver
。
发送者生成文件;这些文件的大小范围从 20Kb 到 30Gb。
我编写了一个脚本,用于在生成文件后检查文件有多大,如果小于 10Mb,则recei.ver
通过 SFTP 发送文件。否则,如果它大于 10Mb,则将其拆分为 10Mb 块,然后recei.ver
通过 SFTP 将其发送到。
发送时间显然是由文件大小和线速度决定的。该线速可能低至 100Kbps,这意味着理论上传输最大文件可能需要长达 11 个小时。
我需要的
我想做的就是recei.ver
自动将文件重新整理成一个大文件(并运行一些额外的任务,例如解压、发送通知电子邮件等)。
我什么可以做
我可以尝试使用inotifywait
该-m
选项,然后检查正在写入的文件的文件大小,然后在创建的最后一个文件小于 10,485,760 字节时进行分类。
然后我可以捕捉这些块,并用一个测试焦油tar tf <filename>; echo $?
有没有更好的办法?
它可能会起作用......但看起来并不优雅。有一个更好的方法吗?
答案1
使用部分文件的大小作为隐式结束标记可能很脆弱。更好的办法是先发送各个部分,然后发送一个列出各个部分的控制文件(可能使用 sha256 校验和来检测传输问题),以便接收程序可以检查是否所有部分都已传输,然后才开始重新组装。