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'
:
PS C:/> Get-S3Directories -BucketName 'myBucket' -Recurse $true
どこ各これは、文字列のコレクションを返しますS3バケットで唯一のトップレベルのディレクトリを取得するために
stringは共通の接頭辞です。
出力例:
myprefix/
myprefix/txt/
myprefix/img/
myotherprefix/
...