我有一个ETL(SSIS)作业,它在将文件发送到SFTP服务器之前在名为TEST_20170505.csv
的文件夹中创建一个文件。
文件夹中会有多个文件,例如TEST_20170504.csv
,TEST_20170503.csv
。目前,我在批处理文件中使用了以下sftp
脚本文件(File.txt
)。
lcd E:\localpath\
cd \sftpserverpath\
ascii
put *.csv
bye
这是我的.bat
文件。
sftp -oIdentityFile=E:\sftp\filepath\ssh.ppk -B E:\sftp\filepath\File.txt username@ipaddress
但是这会将本地路径中的所有文件上传到SFTP服务器,而不是采用最新/上次修改/当前日期文件。
答案 0 :(得分:1)
OpenSSH sftp
不能单独执行此操作。但是您可以使用一些花哨的批处理文件构造来选择最新文件,然后生成临时sftp
上传脚本。
一些参考文献:
或者使用一些更高级的Windows命令行SFTP客户端。
例如使用WinSCP scripting,就像使用-latest
switch in the put
command一样简单:
open sftp://username@example.com/ -privatekey=ssh.ppk
lcd E:\localpath\
cd \sftpserverpath\
ascii
put -transfer=ascii -latest *.csv
exit
运行脚本(upload.txt
),如:
winscp.com /script=upload.txt /ini=nul /log=upload.log
您甚至可以WinSCP generate the script/batch file for you(您只需手动添加-latest
开关。)
参考文献:
请注意,WinSCP使用.ppk格式的私钥文件。虽然OpenSSH sftp
使用PEM格式。即使您的密钥文件名为.ppk,也不能是真正的.ppk文件,否则sftp
会拒绝它。您可能已将原始.ppk文件转换为PEM,但错误地保留了原始扩展名。您必须将原始.ppk文件与WinSCP一起使用(如果您没有,可以使用PuTTYgen将PEM转换回.ppk)。
另请注意,WinSCP实际上支持text / ascii模式(-transfer=ascii
),而sftp
没有(没有ascii
命令)。
(我是WinSCP的作者)
答案 1 :(得分:0)
解决方案不是在脚本文件中输入“ * .csv”,而是指定要上传的实际文件名