AWS S3,上载后从本地目录删除文件

时间:2017-02-07 11:42:23

标签: powershell amazon-web-services batch-file amazon-s3 aws-cli

我在一个驱动器的不同目录中有备份文件。这些目录中的文件可能非常大,最高可达800GB。所以我有一个包含一组脚本的批处理文件,可以将文件上传/同步到S3。

见下面的例子:

aws s3 sync R:\DB_Backups3\System s3://usa-daily/System/ --exclude "*" --include "*/*/Diff/*"

上传时间可能会有所不同,但到目前为止还不错。

我的问题是,如何编辑脚本或创建一个新的脚本,在s3存储桶中检查文件是否已上传,只有在上传后才将其从本地驱动器中删除,如果没有将它们保留在驱动器?

(理想情况下会检查每个文件)

我不熟悉aws s3或aws cli命令可以做到这一点?如果我说清楚或者您需要更多细节,请告诉我。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

正如@ketan的回答所示,亚马逊aws客户端无法进行批量移动。

您可以改为使用WinSCP put -delete command

winscp.com /log=S3.log /ini=nul /command ^
    "open s3://S3KEY:S3SECRET@s3.amazonaws.com/" ^
    "put -delete C:\local\path\* /bucket/" ^
    "exit"

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

(我是WinSCP的作者)

答案 1 :(得分:0)

您无法使用sync,因为它会在您删除相应的本地副本时删除S3中的文件。

相反,请使用mv本地文件移至S3。因此,如果命令成功,则将本地文件上载到S3并删除。如果命令失败,则本地文件将安全地保留在磁盘上。查看文档here

但是,mv适用于文件级别,而sync可以查看整个目录。因此,您需要编写代码来遍历目录中的所有文件,并逐个调用mv

答案 2 :(得分:0)

最好将mv--recursive参数一起用于多个文件

当与参数--recursive一起传递时,以下mv命令将指定目录下的所有文件递归移动到指定的存储区和前缀,同时使用--exclude参数排除某些文件。在此示例中,目录myDir具有文件test1.txt和test2.jpg:

aws s3 mv myDir s3://mybucket/ --recursive --exclude "*.jpg"

输出:

move: myDir/test1.txt to s3://mybucket2/test1.txt

希望这会有所帮助。