我在一个驱动器中的不同目录中有备份文件。这些目录中的文件可能非常大,最高可达800GB。所以我有一个包含一组脚本的批处理文件,用于将文件上传/同步到S3。
见下面的例子:
aws s3 sync R:\DB_Backups3\System s3://usa-daily/System/ --exclude "*" --include "*/*/Diff/*"
上传时间可能会有所不同,但到目前为止还不错。
我的问题是,如何编辑脚本或创建一个新的脚本,在s3存储桶中检查文件是否已上载,只有在上传后才将其从本地驱动器中删除,如果没有将它们留在驱动器上?
(理想情况下会检查每个文件)
我不熟悉aws s3或aws cli命令可以做到这一点?如果我自己清楚或者您需要更多细节,请告诉我。
任何帮助将非常感激。
正如@ketan所说,亚马逊aws
客户端不能做批量移动。
您可以使用WinSCP put -delete
command代替:
winscp.com /log=S3.log /ini=nul /command ^
"open s3://S3KEY:[email protected]/" ^
"put -delete C:\local\path\* /bucket/" ^
"exit"
你需要URL-encode special characters in the credentials。 WinSCP GUI可以为您提供generate an S3 script template,就像上面的那样。
(我是WinSCP的作者)
你不能使用sync
,因为它会在删除相应的本地副本时删除S3中的文件。
相反,使用mv
,它将本地文件移动到S3。因此,如果命令成功,则将本地文件上载到S3并删除。如果命令失败,则本地文件将安全地保留在磁盘上。检查文档here。
但是,mv
在文件级别工作,而sync
可以查看整个目录。因此,您需要编写代码来遍历目录中的所有文件,并逐个调用mv
。
最好是将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
希望这可以帮助。