【问题标题】:How to display only the directories from s3 bucket using aws cli command如何使用 aws cli 命令仅显示来自 s3 存储桶的目录
【发布时间】:2020-03-20 18:15:23
【问题描述】:

我需要显示 s3 存储桶中存在的所有目录,其中一些目录是隐藏的,只有当我将版本过滤为“显示”而不是隐藏时才会再次显示。

同样的事情发生在目录中的文件中,我们看不到文件,但是当我们在版本中选择过滤器为“显示”时,它会显示文件。

我们如何在 aws-cli 中查看这些文件和目录。如果您有解决方案,请提供帮助。


例如:

roxor@ubuntu:~$ aws s3 ls s3://dw-etl-source-prod
workday dsr

我需要获取 4 个目录,但由于目录包含版本控制,因此未显示。如果我在版本中进行过滤以显示它会提供 aws s3 UI 中的所有文件,但是我如何使用 AWS CLI 来做同样的事情。

【问题讨论】:

  • 您能否澄清或/并展示一些预期的结果?
  • roxor@ubuntu:~$ aws s3 ls s3://dw-etl-source-prod \n workday dsr \ni 需要获取 4 个目录,但由于目录包含版本控制,因此未显示.如果我过滤版本以显示它会提供 aws s3 UI 中的所有文件,但我将如何在 aws cli 中做同样的事情
  • S3 中没有目录,只有存储桶和文件。 “directory1/directory2/file”只是存储桶中文件的名称。 “directory3/directory4/file”是同一个存储桶中的另一个文件 - 它存储在前一个文件附近。

标签: bash amazon-web-services amazon-s3 devops aws-cli


【解决方案1】:

检查键的最后一个字符/

aws s3api list-objects-v2 --bucket <your_bucket> --prefix <prefix> --query 'Contents[?ends_with(Key, `/`)].[Key]' --output text

【讨论】:

  • 不幸的是,没有一个键以/ 结尾,导致输出为空。
【解决方案2】:

如果您在基于 POSIX 的系统上并想使用熟悉的 aws s3 ls 语法,请尝试:

aws s3 ls --recursive <s3Uri> | cut -c32- | xargs -d '\n' -n 1 dirname | uniq

这里有一个简单的解释。截至 2020 年 11 月,aws s3 ls 以以下格式打印对象:

<date> <time> <size> <path>

这个想法是使用cut从这个列表中提取&lt;path&gt;,将其传递给dirname以提取目录名称,最后使用uniq以避免重复。 cut -c32- 将 s3 列表修剪到第 31 个字符。如果您的文件太大,您可能需要对此进行调整。

【讨论】:

  • 您有什么理由不只是拉出第四个字段而不是剪切明确数量的字符? awk 或对 cut 的不同调用似乎更强大。
  • @MichaelAlbers 不幸的是,aws s3 ls 使用空格而不是制表符作为分隔符,因此提取 第 4 个字段 对我来说并不容易。修剪 31 个字符是我能做的最好的了。
【解决方案3】:

你可以试试。

aws s3 ls s3://<bucket-name> --recursive --human-readable --summarize | awk '{print $5}' | awk -F '/' '/\// {print $1}' | sort -u

【讨论】:

    【解决方案4】:

    我的解决方案:

    aws s3 ls://<your bucket>/<path>/<to>/ | awk '{print $2}'
    

    【讨论】:

      猜你喜欢
      • 2016-08-17
      • 1970-01-01
      • 2017-05-06
      • 2017-08-24
      • 2016-02-21
      • 2021-10-14
      • 2022-01-23
      • 2017-05-21
      • 2021-06-10
      相关资源
      最近更新 更多