【问题标题】:How to verify if upload is finished in SFTP [duplicate]如何验证上传是否在 SFTP 中完成 [重复]
【发布时间】:2021-05-27 15:09:05
【问题描述】:

我正在使用 bash 脚本通过 Sftp 将文件上传到目标服务器。

在 sftp 不返回任何内容或网络连接可能中断的情况下,如何确定上传的文件已完成上传?

我看到我可以在上传到服务器之前获取文件的大小,然后我可以将它与服务器上文件的现有大小进行比较。

也许您可以提及其他更好的选择?

谢谢。

【问题讨论】:

  • 改用scp,因为它提供了一个退出代码,可用于确定是否存在错误 - sftp 没有。
  • @twalberg,谢谢,但我只能使用 Sftp。
  • OpenSSH sftp 在退出代码中也提供了错误指示。
  • @MartinPrikryl 在我目前使用的至少一个发行版中,sftp 的手册页没有提及退出代码。如果它确实提供了一个,它是基于运行的最后一个命令(即 cd 或 ls 或其他东西)还是基于最后一次传输,还是基于其他东西?我想也许我必须去代码潜水才能弄清楚。 scp 的退出条件至少记录在案...
  • 你说得对,它似乎没有记录在案。它仅在使用-b 开关时有效(批处理模式)。在批处理模式下,任何错误都会中止脚本并返回退出代码1

标签: bash sftp


【解决方案1】:

我认为获取尺寸是一个不错的选择。 我能想象的:

客户端: - 将文件的大小及其 md5 放在一个文件中,例如“.fileinfo” - 将文件信息发送到服务器 - 将(有趣的)文件发送到服务器

服务器端: - 定期检查文件夹的文件(例如使用“watch ls”命令) - 如果存在“.fileinfo”,则读取它,并检查大小是否对应于同名的现有文件(没有“.filefome”)。如果大小对应,则对文件进行“md5sum”,并检查是否对应。如果是,请将您的文件移动到最终目标文件夹中,然后删除“.fileinfo”文件。如果不重复。

【讨论】:

    【解决方案2】:

    许多下载软件的网站都会提供软件及其校验和。

    我们可以使用相同的技术来检查我们的上传文件。
    上传文件及其校验和,在服务器端将文件的校验和与上传的校验和进行比较, 如果两者不匹配,你就会知道

    1. 上传的文件已损坏,或
    2. 上传的校验和已损坏,或
    3. 校验和和上传的文件都已损坏。

    【讨论】:

      【解决方案3】:

      sftp 的测试退出代码。如果它返回0,您可以确定一切正常(假设您使用的是OpenSSH sftp)。这仅在您使用 -b 开关时有效(我假设您正在做的事情)。

      SFTP 协议允许checksum calculation,但我想你被不支持此功能的 OpenSSH(或任何一方或双方)卡住了。

      为 100% 确定,您可以将文件下载回来并与原始文件进行比较。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-18
        • 1970-01-01
        • 2018-05-24
        • 2013-11-16
        • 1970-01-01
        • 1970-01-01
        • 2019-04-30
        相关资源
        最近更新 更多