PowerShell for AWS:仅列出S3存储桶中的“文件夹”吗?

尼克·施罗德

有没有一种简单的方法可以使用PowerShell从S3存储桶中仅获取“文件夹”列表,而不列出每个对象,而仅编写不同路径的已编译列表的脚本?我正在处理的存储桶中有成千上万的单个对象,这将花费很长时间。

可能这是一个非常愚蠢的问题,很抱歉,但是我在Google或SO上找不到任何答案。我尝试将通配符添加到Get-S3Object的-KeyPrefix和-Key参数没有用。那是唯一看起来似乎可以执行我所追求的功能的cmdlet。

没有意义的背景故事:我只想确保将文件传输到正确的现有文件夹中。我是签约第三方,所以我没有控制台登录访问权限,而且我不是维护AWS账户的人。

我知道使用Java,C#和其他语言可以实现这一点,但是我正在做与PS中这个相当简单的项目有关的所有其他事情,并希望能够坚持下去。

提前致谢。

安东尼·内斯

您可以使用适用于PowerShellAWS工具在存储桶中列出对象(通过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/
...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在AWS S3存储桶的特定“文件夹”中列出文件

从多个文件夹的s3存储桶中仅读取特定的json文件

仅列出s3存储桶中的子文件夹

如何使用Android SDK在AWS S3存储桶中创建一个空文件夹?

将文件从Box文件夹复制到AWS s3存储桶

AWS S3在两个存储桶之间复制文件和文件夹

亚马逊s3,将文件上传到存储桶中的文件夹中

重命名AWS S3存储桶中的文件夹的成本

如何从Amazon S3存储桶中的文件夹中获取所有文件?

从S3存储桶中的文件夹中删除文件

AWS S3存储桶中特定文件夹内html文件上的Content-Encoding标头

AWS Powershell加密S3存储桶

Amazon S3存储:可以在私有存储桶中列出公共文件夹吗?

Python-无法将文件上传到AWS S3存储桶中的已定义文件夹

如何使用AWS PowerShell在S3中创建新文件夹

在Powershell中列出给定深度以下的文件夹

AWS PowerShell检索Elastic Beanstalk环境源包的存储桶名称和S3键

AWS S3存储桶策略-仅允许文件夹中的某些文件类型

使用Shrine在文件夹之间的AWS S3存储桶上移动文件

对用户组的AWS访问S3存储桶的文件夹

删除位于Amazon S3上存储桶中的子文件夹中的文件

AWS CLI在s3存储桶中搜索文件并复制到其他文件夹

有什么方法可以将移动存储中的文件夹与AWS S3存储桶中的文件夹同步?

S3 / Cloudfront:如何在存储桶中列出文件夹的内容

Powershell:使用临时凭证访问AWS s3存储桶

使用 python boto 仅下载 S3 存储桶中的特定文件夹

PowerShell - 列出 TreeView GUI 元素中的所有文件夹和子文件夹

用于删除 S3 存储桶中文件的本机 PowerShell ForEach 循环

如何在powershell中列出onedrive文件夹?

TOP 榜单

热门标签

归档