我想編寫一個從Linux到Windows FTP服務器的文件傳輸的複雜場景(檢測新的/更改的文件,然後傳輸),並且我無法找到命令-line ftp客戶端,它支持在非交互模式下通過永久(一次登錄)會話發送文件。在shell腳本中使用的持久非交互式FTP會話
ssh/scp
無密碼驗證不是一個選項,因爲我無法訪問Windows FTP服務器。
例如使用lftp
`lftp -u user,pass -p 21 -e "mput newfile.txt;"` 10.0.0.100
將上傳我的文件服務器,但需要驗證/握手每個請求,這需要很長的時間,嚴重會減慢轉移的情況發生。
我想知道是否有一種方法來驗證一次,建立一個持久連接,然後通過此連接發送文件。 lftp
和其他客戶端都可以在交互模式下執行此操作(連接,然後執行多個命令直至退出)。
因此:
- 是否有在Linux上的FTP客戶端可以像這樣在非交互模式下運行?
- 另外,有沒有一種方法來模擬這種行爲,在交互模式下編寫腳本?也許有些東西利用
expect
與netcat/telnet
和/或命名管道?
除了自動化的密碼輸入,lftp的已經可以編寫腳本:https://web.archive.org/web/20111024014512/http://tutorials.papamike.ca/pub/lftp.html #scripts –
許多語言都使用FTP客戶端,因此您可以根據需要創建任意複雜的腳本:[Tcl](http://core.tcl.tk/tcllib/doc/trunk/embedded/www/tcllib/files/modules /ftp/ftp.html),[Perl](https://metacpan.org/pod/Net::FTP),[Ruby](http://ruby-doc.org/stdlib-2.2.2/libdoc/ net/ftp/rdoc/Net/FTP.html),[Python](https://docs.python.org/3/library/ftplib.html?highlight=ftp#module-ftplib) –
@glennjackman我知道' lftp'可以從一個文件中的命令中讀取一個集合,並且我也可以將多個命令放入其中,但這並不能解決我想實現的目標。正如我所說的,我想在文件可用時上傳文件(檢測新的/更改的文件)。因此,我無法用命令預先填充腳本,我必須在檢測到文件時啓動新的傳輸。這就是我希望會議保持開放的原因,以避免重新連接。 – henfiber