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

如何实现SFTP逐个传输文件,文件间至少间隔1秒?

解决方案

修改思路

  1. 修正原脚本中路径含空格的语法问题,确保复制操作正常执行
  2. 替换批量传输的mput命令为单个文件传输的put命令,通过循环逐个处理文件
  3. 每次传输完成后添加sleep 1保证文件间的传输间隔至少1秒

修改后的脚本

#!/bin/bash

# 将Dir A的内容复制到Dir B,用引号包裹带空格的路径避免解析错误
cp -R "/usr/sap/tmp/Dir A/." "/usr/sap/tmp/Dir B/"

# 遍历Dir B下所有.dat文件,逐个执行SFTP传输
for file in "/usr/sap/tmp/Dir B/"*.dat; do
    # 跳过不存在的文件(比如目录下无.dat文件的场景)
    [[ -f "$file" ]] || continue

    # 单个传输文件,-E参数表示传输完成后删除本地文件
    lftp <<_EOF_
open sftp://User:Password@Host -p Port
lcd "/usr/sap/tmp/Dir B"
cd /
put -E "$(basename "$file")"
exit
_EOF_

    # 等待1秒后再处理下一个文件
    sleep 1
done

关键说明

  • 带空格的路径必须用双引号包裹,防止bash将空格解析为参数分隔符
  • for循环遍历目标目录下的所有.dat文件,确保文件被逐个处理
  • [[ -f "$file" ]]判断避免当目录中没有.dat文件时,出现No such file or directory的错误
  • put -E实现单个文件传输后删除本地文件,和原脚本mput -E的清理逻辑保持一致
  • sleep 1强制保证两次传输的间隔至少为1秒

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:20:43