您可以使用AWS Tools For PowerShell在存储区中列出对象(通过Get-S3Object)并从响应对象中提取公共前缀。
下面是一个小型图书馆递归检索子目录:
function Get-Subdirectories
{
param
(
[string] $BucketName,
[string] $KeyPrefix,
[bool] $Recurse
)
@(get-s3object -BucketName $BucketName -KeyPrefix $KeyPrefix -Delimiter '/') | Out-Null
if($AWSHistory.LastCommand.Responses.Last.CommonPrefixes.Count -eq 0)
{
return
}
$AWSHistory.LastCommand.Responses.Last.CommonPrefixes
if($Recurse)
{
$AWSHistory.LastCommand.Responses.Last.CommonPrefixes | % { Get-Subdirectories -BucketName $BucketName -KeyPrefix $_ -Recurse $Recurse }
}
}
function Get-S3Directories
{
param
(
[string] $BucketName,
[bool] $Recurse = $false
)
Get-Subdirectories -BucketName $BucketName -KeyPrefix '/' -Recurse $Recurse
}
这个递归函数依赖于更新在每次迭代的KeyPrefix检查子目录中的每个KeyPrefix传递给它。通过将分隔符设置为'/'
,在到达分隔符第一次出现之前匹配KeyPrefix字符串的键将滚动到$ AWSHistory的最后一个响应中的CommonPrefixes集合中。
要在S3桶只检索顶级目录:
PS C:/> Get-S3Directories -BucketName 'myBucket'
要检索的所有目录中的S3斗:
PS C:/> Get-S3Directories -BucketName 'myBucket' -Recurse $true
这将返回一个字符串的集合,其中每个字符串是一个通用的前缀。
示例输出:
myprefix/
myprefix/txt/
myprefix/img/
myotherprefix/
...