首页 > 解决方案 > 由于超时错误,Bash 脚本中的 mget 无法正常工作,因为文件很大

问题描述

我正在尝试执行具有 mget*.*以下载目录中所有文件的 bash 脚本。它正在下载 File1 中的几个文件,但它可能由于超时错误而跳过了 File2 部分。我相信这是由于超时错误,因为

1)我尝试对其他目录实施相同的操作,效果很好。可能是因为 File2 中的文件较少。

2)虽然我试图做命令行模式

sftp username@hostname 
cd file2
mget *.* 

响应至少需要 40 秒到 1 分钟,但它最终确实下载了所有文件。

所以,我猜在执行 bash 脚本时,它可能会因为超时而停止。请建议我解决方法。下面是我的 bash 脚本。

#test purpose only
#!/bin/bash
export Src_Dir=/path

File1=/path/*.*
File2=/path/Archive/*.*
DATE=`date +"%Y-%m-%d"`
Pass_Pwd='password'
PORT=22

cd "$Src_Dir" || { echo 'Failed to chdir into $Src_Dir' ; exit 0; }

/usr/bin/expect<<EOD


spawn /usr/bin/sftp -o Port=${PORT} username@host
expect "password:"
send "$Pass_Pwd\r"
expect "sftp>"
send "lcd ${Src_Dir}\r"
expect "sftp>"
send "mget ${File1}\r"
expect "sftp>"
send "mget ${File2}\r"
expect "sftp>"
send "bye\r"
EOD
echo "Download done"

标签: linuxbashtimeoutsftpmget

解决方案


我已经写了set timeout -1上面的Spawn命令,然后它完美地工作了:)

谢谢你们 :)


推荐阅读