3

我正在尝试 Get-S3Object -BucketName 试点,但它有很多子目录。

4

3 回答 3

14

您可能希望使用Copy-S3Object来进行实际复制。Get-S3Object 返回 S3Object 元数据的集合。使用 Get-S3Object 隔离要复制的对象,然后将重要信息(密钥)传递给 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)"

于 2014-02-28T16:07:30.417 回答
4

您想使用 Read-S3Object 复制到本地作业。Read-S3Object 调用 Get-S3Object,所以你只需要这个:

Read-S3Object -BucketName $myS3Bucket-KeyPrefix $myS3SubDirectory -Folder $myLocalFolder
于 2015-01-30T18:24:02.337 回答
1

我拥有的适用于 Powershell 的 AWS 版本不允许为copy-s3object. 所以你可以使用read-s3object.

另外,get-s3object没有存储桶名称参数,很奇怪。

Get-S3Object -BucketName mybucket -Key path/to/files | % { Read-S3Object -BucketName mybucket -Key $_.Key -File $("C:\"+$_.key)}
于 2014-03-06T17:59:45.687 回答