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/
...