You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

GitBash下如何通过SFTP恢复中断的10GB+大文件下载?

解决SFTP断点续传失败(reget提示non-regular file)的问题

我来帮你搞定这个大文件续传的麻烦~你遇到的cannot download non-regular file错误,是因为reget命令要求服务器上的目标文件必须是普通常规文件(也就是ls输出里开头是-的文件),如果文件是符号链接、设备文件,或者服务器SFTP服务的配置限制了文件类型识别,就会触发这个报错。

下面给你几个靠谱的续传方案,都是GitBash环境下能直接用或者轻松安装的:

方案1:用curl快速续传(GitBash自带)

curl支持SFTP协议的断点续传,命令非常简洁:

# 带密码的写法(不推荐明文,仅作示例)
curl -C - -u 你的用户名:你的密码 sftp://服务器地址/远程文件的完整路径 -o 本地保存的文件名

# 更安全的写法(交互式输密码)
curl -C - -u 你的用户名 sftp://服务器地址/远程文件的完整路径 -o 本地保存的文件名

参数解释:

  • -C -:自动检测本地已下载文件的大小,从断点位置继续下载
  • -u:指定SFTP的用户名(加:密码可以免交互,但不建议明文写密码)
  • -o:指定本地保存的文件名(如果之前已经下载了一部分,要和之前的文件名一致)

方案2:用lftp实现更稳定的续传(需安装)

lftp是专门的文件传输工具,续传逻辑更智能,对各种文件类型的兼容性更好。如果你的GitBash里没有lftp,可以用Chocolatey安装(GitBash里直接运行):

choco install lftp

安装完成后,按以下步骤操作:

  1. 连接到SFTP服务器:
lftp sftp://你的用户名@服务器地址
  1. 输入密码后,切换到远程文件所在的目录:
cd /远程文件所在的目录路径
  1. 执行续传命令:
get -c 远程文件名

-c参数就是续传模式,lftp会自动对比本地已下载的文件大小,跳过已经下载的部分,直接从断点开始传输。

额外排查:确认远程文件类型

如果你一定要用原生SFTP的reget,可以先在SFTP会话里检查远程文件的类型:

ls -l /远程文件的完整路径

看输出的第一个字符:

  • 如果是-:是普通文件,那可能是服务器SFTP服务的配置问题,建议联系管理员调整
  • 如果是l:是符号链接,需要用符号链接指向的实际文件路径来执行reget
  • 如果是d:是目录,那你肯定搞错了下载对象,重新确认文件路径

内容的提问来源于stack exchange,提问作者user8927198

火山引擎 最新活动