是否可以限制 S3 存储桶中递归目录列表的深度?

Is it possible to limit the depth of a recursive directory listing in S3 bucket?

我使用了以下命令:

aws s3 ls s3://mybucket/mydir --recursive > bigfile

生成的文件太大 (9.5MB),不方便使用,因为我需要仔细查看我正在寻找的信息。

我真正需要的是向下三层的信息。是否可以调整此命令,以便我只递归 N 个级别,而不是一直递归到每个目录?对于 S3 CLI ls 命令

,我没有看到任何类似 -maxdepth 的东西

更新: 这是我最终用来获取所需信息的命令,尽管我对此并不满意。当我只想要 40 个左右的唯一值时,它仍然给了我 77000 个结果,但它足够短,可以移植到 excel 并使用文本到列进行缩减并删除重复项。

 aws s3 ls s3://mybucket/mydir --human-readable --summarize --recursive | egrep '*_keytext_*' | tr -s ' ' | cut -d' ' -f5 >smallerfile

亚马逊S3没有'levels'的概念。它是一个平面存储系统,路径是对象名称(Key)的一部分。但是,某些 API 调用支持指定 Prefix 的功能,其操作类似于在特定目录中查找。

使用 aws s3 ls 的替代方法是使用 Amazon S3 Inventory,它可以提供列出存储桶内容的每日 CSV 文件。

虽然已接受的答案完全正确,但拥有此功能仍然非常有用,aws-cli (https://github.com/aws/aws-cli/issues/2683) 上的错误报告证明了这一点。

我使用 bash 脚本和 awk 脚本解决了这个问题。 bash 脚本获取一个级别,awk 脚本解析输出并递归调用 bash 脚本获取下一个级别。

#!/bin/bash
# Save as ./s3-tree.sh
bucket=; max_depth=; path=${3:-}; depth=${4:-1};
[ $depth -gt $max_depth ] || \
  aws s3 ls "s3://$bucket/$path" | \
  awk -v bucket="$bucket" -v path="$path" -v depth="$depth" -v max_depth="$max_depth" -f s3-tree.awk
#!/bin/awk
# Save as: ./s3-tree.awk
BEGIN  { FIELDWIDTHS = "10 1 8 1 10 1 600" }
 == 0 { next } # Ignore zero-size files
{ print  " "  " "  " " path  }
 == "       PRE" && depth <= max_depth { system("./s3-tree.sh " bucket " " max_depth " " path  " " depth+1); next }

调用为:

./s3-tree.sh <my-bucket-name> <max-depth> [<starting-path>]

分享并享受!