批处理文件仅将今天的文件上传到S3(获取文件名作为列表,循环执行,执行cp命令)

时间:2016-03-15 02:39:07

标签: batch-file amazon-s3 amazon-ec2 aws-cli

我需要创建一个脚本,以便在调度程序的基础上使用Z:\命令仅将aws s3 cp驱动器中创建的文件复制到AWS S3。

例如在Z:\中,目前我有这些文件:

Filename                                            Date Modified
BELSIZE.0.DB2.NODE0000.CATN0000.20160313090011.001  3/13/2016 9:00 AM
BELSIZE.0.DB2.NODE0000.CATN0000.20160314090015.001  3/14/2016 9:00 AM
BELSIZE.0.DB2.NODE0000.CATN0000.20160315090010.001  3/15/2016 9:00 AM
BELSIZE.0.DB2.NODE0000.CATN0000.20160315100012.001  3/15/2016 10:00 AM

我只需将日期为2016年3月15日的最后2个文件复制到AWS S3。

我现在拥有的是:

  1. 列出今天创建的路径+文件名:

    forfiles /P "Z:\" /s /m *.* /d +0 /c "cmd /c echo @path
    
  2. 将文件复制到AWS S3:

    aws s3 cp Z:\BELSIZE.0.DB2.NODE0000.CATN0000.20160315090010.001 s3://backup
    
  3. 我正在考虑将1)作为列表,循环1)并执行2)。我怎么能这样做?

    我尝试了以下命令。今天创建的文件不会被复制到S3。

    forfiles /P "Z:\" /s /m *.001 /d +0 /c "cmd /c aws s3 cp @path s3://backup"
    

1 个答案:

答案 0 :(得分:1)

使用WinSCP很容易。要仅上传今天的文件,请使用批处理文件,如:

winscp.com /log=S3.log /ini=nul /command ^
    "open s3://S3KEY:S3SECRET@s3.amazonaws.com/" ^
    "put -filemask=>=today Z:\* /bucket/" ^
    "exit"

>=today keyword仅受WinSCP 5.15支持。在旧版本中,您可以使用%TIMESTAMP% syntax

    "put -filemask=>=%%TIMESTAMP#yyyy-mm-dd%% Z:\* /bucket/" ^

您需要URL-encode special characters in the credentials。对于您,WinSCP GUI可以generate an S3 script template,如上所述。

参考文献:

(我是WinSCP的作者)