首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在S3桶中搜索文件扩展名和大小

在S3桶中搜索文件扩展名和大小
EN

Stack Overflow用户
提问于 2022-01-12 18:47:15
回答 3查看 1.2K关注 0票数 0

我们的S3桶上有多个文件,具有相同的文件扩展名。

我想找到一种方法来列出所有这些文件扩展名,并在我们的桶中以人类可读的格式占用大量的空间。

例如,与其仅仅列出使用aws s3 ls s3://ebio-rddata --recursive --human-readable --summarize的所有文件

我只想列出文件扩展名和它们的总大小:

代码语言:javascript
复制
.basedon.peaks.l2inputnormnew.bed.full | total size: 100 GB
.adapterTrim.round2.rmRep.sorted.rmDup.sorted.bam | total size: 200 GB
.logo.svg | total size: 400 MB
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-01-12 22:33:00

下面是一个Python脚本,它将按扩展对对象进行计数,并按扩展计算总大小:

代码语言:javascript
复制
import boto3

s3_resource = boto3.resource('s3')

sizes = {}
quantity = {}

for object in s3_resource.Bucket('jstack-a').objects.all():
  if not object.key.endswith('/'):
    extension = object.key.split('.')[-1]
    sizes[extension] = sizes.get(extension, 0) + object.size
    quantity[extension] = quantity.get(extension, 0) + 1
    

for extension, size in sizes.items():
  print(extension, quantity[extension], size)

如果有一个没有扩展的对象,那就有点好笑了。

票数 1
EN

Stack Overflow用户

发布于 2022-01-12 18:51:12

为此,您必须使用SDK,使用您最喜欢的语言和脚本来递归地筛选出您想要的文件格式的对象。

然后将列表导出为csv或json,只要您更喜欢更易读。

票数 0
EN

Stack Overflow用户

发布于 2022-01-12 21:02:40

以下是如何使用awscli和其他几个命令行工具(grep和awk,在Mac和Linux上可以免费获得)来解决这个问题的想法。

代码语言:javascript
复制
aws s3 ls s3://mybucket --recursive \
    | grep -v -E '^.+/$' \
    | awk '{na=split($NF, a, "."); tot[a[na]] += $3; num[a[na]]++;} END {for (e in tot) printf "%15d %6d %s\n", tot[e], num[e], e};'

一步一步,aws s3 ls s3://mybucket --recursive的结果如下所示:

代码语言:javascript
复制
2021-11-24 12:45:39  57600 cat.png
2021-09-29 13:15:48  93651 dog.png
2021-09-29 14:16:06   1448 names.csv
2021-02-15 15:09:56      0 pets/
2021-02-15 15:09:56    135 pets/pets.json

通过grep -v -E '^.+/$'管道删除文件夹,结果如下所示:

代码语言:javascript
复制
2021-11-24 12:45:39  57600 cat.png
2021-09-29 13:15:48  93651 dog.png
2021-09-29 14:16:06   1448 names.csv
2021-02-15 15:09:56    135 pets/pets.json

最后,为每一行调用AWK脚本。它分割句号字符(split($NF, a, "."))上每一行的最后一个字,这样就可以计算出文件扩展名是什么(存储在a[na]中)。然后,它根据tot[extension]中的扩展名聚合文件大小,并在num[extension]中按扩展名进行文件计数。它最终按扩展名打印出聚合文件大小和文件计数,如下所示:

代码语言:javascript
复制
     151251      2 png
       1448      1 csv
        135      1 json

您也可以很简单地解决这个问题,例如在Python中使用boto3 SDK。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70686857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档