从命令行进行 sftp 传输似乎有一个文件大小限制,如果我尝试下载一个 20 MB 的文件,当传输的数据大于 4 MB 时,它会在 20% 处停止:
/myfile.xml 22% 4480KB 410.4KB/s 00:38 ETA
是否存在限制?如何更改?我使用使用 expect 编写脚本的 sftp 连接. 通过下载文件Nautilus 文件管理器或者从控制台使用 sftp,无需 shell 脚本,预计程序似乎都可以工作。脚本如下:
#!/usr/bin/expect
# usage: ./sftp_import.sh username host password filepath localpath
set username [lindex $argv 0]
set host [lindex $argv 1]
set password [lindex $argv 2]
set filepath [lindex $argv 3]
set localpath [lindex $argv 4]
spawn sftp $username@$host
expect "password:"
send "$password\r";
expect "sftp>"
send "get $filepath $localpath\r"
expect "sftp>"
send "bye \r";
exit 0
答案1
似乎添加超时可以解决问题。默认的预期超时是10 秒,这意味着在 400 KB/s 的速率下,如果达到 4000 KB = 4 MB,就会触发超时
set timeout 300
答案2
默认情况下没有限制(据我所知)。
我猜你遇到了数据包丢失和超时问题。尝试添加 -D。
-D sftp_server_path Connect directly to a local sftp server (rather than via ssh(1)). This option may be useful in debugging the client and server.
来源:http://www.cl.cam.ac.uk/cgi-bin/manpage?1+sftp
我可能会用 rsync 来复制它,rsync -avrz --ignore-existing /folder/folder/folder [email protected]:/folder/folder/folder