如何实现SFTP逐个传输文件,文件间至少间隔1秒?
解决方案
修改思路
- 修正原脚本中路径含空格的语法问题,确保复制操作正常执行
- 替换批量传输的
mput命令为单个文件传输的put命令,通过循环逐个处理文件 - 每次传输完成后添加
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
相关产品推荐
相关产品推荐

