我在一个驱动器的不同目录中有备份文件。这些目录中的文件可能非常大,最高可达800GB。所以我有一个包含一组脚本的批处理文件,可以将文件上传/同步到S3。
见下面的例子:
aws s3 sync R:\DB_Backups3\System s3://usa-daily/System/ --exclude "*" --include "*/*/Diff/*"
上传时间可能会有所不同,但到目前为止还不错。
我的问题是,如何编辑脚本或创建一个新的脚本,在s3存储桶中检查文件是否已上传,只有在上传后才将其从本地驱动器中删除,如果没有将它们保留在驱动器?
(理想情况下会检查每个文件)
我不熟悉aws s3或aws cli命令可以做到这一点?如果我说清楚或者您需要更多细节,请告诉我。
非常感谢任何帮助。
答案 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
希望这会有所帮助。