You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell脚本调用sftp拉取文件遇不存在目录卡住的问题求解

问题解决方法

根因分析

sftp批处理模式下,默认遇到执行失败的命令就会中断后续操作。你现有脚本中仅给mget命令加了忽略错误的-前缀,cd命令未加,所以当目标目录不存在、cd执行失败时,整个sftp任务就会中断卡住,不会执行后续的拉取和退出逻辑。

修复方案

方案1:直接添加忽略错误前缀(最简改法)

给所有cd命令前也加上-前缀,单条命令失败后仍会继续执行后续命令,就不会出现卡住的问题:

sshpass -p 'password' sftp -oBatchMode=no -o StrictHostKeyChecking=no -b - user1@www.ftp.com 1>$currentdir/listfiles.log << !
-cd /Root/work/in/abc/
-mget *.* 
-cd /Root/work/in/def/
-mget *.*
bye
!

可选优化项

  • 新增超时配置避免网络异常卡住:在sftp参数中添加-o ConnectTimeout=15,设置15秒连接超时,避免网络不通时长时间无响应
  • 替换明文密码:配置SSH密钥对实现免密登录,去掉脚本中的明文密码,提升安全性
  • 前置目录校验:可以在执行sftp前先批量校验目标目录是否存在,过滤不存在的目录后再生成拉取脚本,减少无效错误日志

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 18:54:03