使用AWS Powershell从Amazon S3服务器复制数据到本地驱动器。

3

我正在尝试使用Get-S3Object -BucketName pilot命令,但它有很多子目录。

3个回答

14

您可能希望使用Copy-S3Object进行实际复制操作。Get-S3Object返回一个S3Object元数据的集合。使用Get-S3Object来获取要复制的对象,然后从中提取重要信息(即Key),并将其传递给Copy-S3Object。

您可以使用KeyPrefix参数将结果过滤到特定的子目录。例如:

$srcBucketName = "myBucket"
$objects = get-s3object -bucketname $srcBucketName -KeyPrefix "mySubdirectory"

如果您需要从所有目录复制数据,您可以通过为桶中的每个目录分别调用get-s3object来将此整体操作分解成较小的块。

如果单个目录仍然太大,则可以使用MaxKeys参数进一步分块操作。


当您准备好复制时,可以执行以下操作:

$objects | 
% { copy-s3object -BucketName $srcBucketName -Key $_.Key -LocalFile "somePath" }

...在你定义本地路径的地方。你甚至可以通过将键解析为字符串来匹配子目录和键到本地路径中:"C:/someDir/$($_.Key)"


谢谢Hyper A,这真的很有帮助。 - Rajan S
1
我在第一次获取的对象中没有看到.BucketName。查看文档,我也没有在Amazon.S3.Model.S3Object上看到Bucket属性。 - BozoJoe
@BozoJoe 感谢您的指正,那是绝对正确的。 - Anthony Neace

4
您想使用Read-S3Object将内容复制到本地任务中。Read-S3Object调用Get-S3Object,所以您只需要执行以下操作:
Read-S3Object -BucketName $myS3Bucket-KeyPrefix $myS3SubDirectory -Folder $myLocalFolder

1
我所拥有的 AWS Powershell 版本不支持使用管道符号进行 copy-s3object 操作,可以使用 read-s3object 代替。此外,get-s3object 命令没有 bucket name 参数,很奇怪。
Get-S3Object -BucketName mybucket -Key path/to/files | % { Read-S3Object -BucketName mybucket -Key $_.Key -File $("C:\"+$_.key)}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接