0

我想编写一个从 Linux 到 Windows FTP 服务器的文件传输的复杂场景(检测新的/更改的文件然后传输),但我找不到支持持久发送文件的命令行 ftp 客户端(一次login) 非交互模式下的会话。

ssh/scp无密码身份验证不是一个选项,因为我无法访问 Windows FTP 服务器。

例如使用lftp

`lftp -u user,pass -p 21 -e "mput newfile.txt;"` 10.0.0.100 

会将我的文件上传到服务器,但需要对每个请求进行身份验证/握手,这需要很长时间并严重减慢传输速度。

我想知道是否有一种方法可以验证一次,建立一个持久连接,然后通过这个连接发送文件。lftp并且其他客户端能够在交互模式下执行此操作(连接然后执行多个命令直到退出)。

所以:

  • Linux 上是否有可以在非交互模式下像这样运行的 FTP 客户端?
  • 或者,有没有办法模拟这种行为,通过交互模式编写脚本?也许使用expectnetcat/telnet/或命名管道的东西?
4

1 回答 1

1

未经测试,但您可以执行以下 Tcl 操作:

package require ftp
set conn [ftp::Open server user pass]
while true {
    after 5000          ;# sleep 5 seconds
    foreach newfile [glob -nocomplain *] {
        puts "sending $newfile"
        ftp::Put $newfile
        file delete $newfile
    }
}

期望将是相似的。未经测试:

set timeout -1
spawn lftp -u user,pass server
expect "> "
while true {
    sleep 5
    foreach newfile [glob -nocomplain *] {
        puts "sending $newfile"
        send "put $newfile\r"
        expect "> "
        file delete $newfile
    }
    send "\r"          ;# "hit enter" as a keep-alive
}
于 2015-06-19T20:21:35.107 回答