如何使用 gsutil 计算存储桶文件夹中的文件数

Posted

技术标签:

【中文标题】如何使用 gsutil 计算存储桶文件夹中的文件数【英文标题】:How to count number of file in a bucket-folder with gsutil 【发布时间】:2013-09-29 22:49:01 【问题描述】:

是否有计算存储桶文件夹中文件数量的选项?

喜欢:

gsutil ls -count -recursive gs://bucket/folder

Result:   666 files

我只是想要一个文件总数来比较 数量到我服务器上的同步文件夹。

我没有在手册中得到它。

【问题讨论】:

【参考方案1】:

如果您可以选择不使用 gsutil,最简单的方法是在 Google Cloud Platform 上进行检查。 转到监控 > 指标资源管理器:

资源类型:GCS 存储桶 指标:对象计数 然后,在下表中,您可以获得每个存储桶包含的文档数量。

【讨论】:

这是一个被低估的答案。【参考方案2】:

作为一个在存储桶中有 450 万个对象的人,我使用了 gsutil du gs://bucket/folder | wc -l,花了大约 24 分钟

【讨论】:

【参考方案3】:

此gist 展示了如何遍历所有 Cloud Storage 存储分区并列出每个存储分区中的对象数量。点赞@vinoaj

for VARIABLE in $(gsutil ls)
do
  echo $(gsutil du $VARIABLE | grep -v /$ | wc -l) $VARIABLE
done

要过滤存储桶,请添加 grep,例如 for VARIABLE in $(gsutil ls | grep "^gs://bucketname")

在控制台中,您可以单击右上角的激活 Cloud Shell 并将其粘贴以获取结果。如果您将命令保存为 bash 脚本,则运行 chmod u+x program_name 以便脚本可以在 GCP Cloud Shell 中运行。

【讨论】:

【参考方案4】:
gsutil ls -lR gs://Floder1/Folder2/Folder3/** |tail -n 1

【讨论】:

【参考方案5】:

带有选项-l(长列表)和-R(递归列表)的gsutil ls command 将递归地列出整个存储桶,然后在最后生成所有对象(包括文件和目录)的总数:

$ gsutil ls -lR gs://pub
    104413  2011-04-03T20:58:02Z  gs://pub/SomeOfTheTeam.jpg
       172  2012-06-18T21:51:01Z  gs://pub/cloud_storage_storage_schema_v0.json
      1379  2012-06-18T21:51:01Z  gs://pub/cloud_storage_usage_schema_v0.json
   1767691  2013-09-18T07:57:42Z  gs://pub/gsutil.tar.gz
   2445111  2013-09-18T07:57:44Z  gs://pub/gsutil.zip
      1136  2012-07-19T16:01:05Z  gs://pub/gsutil_2.0.ReleaseNotes.txt
... <snipped> ...

gs://pub/apt/pool/main/p/python-socksipy-branch/:
     10372  2013-06-10T22:52:58Z  gs://pub/apt/pool/main/p/python-socksipy-branch/python-socksipy-branch_1.01_all.deb

gs://pub/shakespeare/:
        84  2010-05-07T23:36:25Z  gs://pub/shakespeare/rose.txt
TOTAL: 144 objects, 102723169 bytes (97.96 MB)

如果您真的只想要总数,可以将输出通过管道传送到tail 命令:

$ gsutil ls -lR gs://pub | tail -n 1
TOTAL: 144 objects, 102723169 bytes (97.96 MB)

更新

gsutil 现在有一个du command。这使得计数变得更加容易:

$ gsutil du gs://pub | wc -l
232

【讨论】:

太好了,谢谢...... 4 个 mio 文件的速度有点慢......这是操作 1 调用还是算作存储桶元素的数量? ...可能会变得昂贵.. :-) 它在存储桶上列出一个对象,并翻阅结果,我认为一次 1000 个,所以它会进行 N/1000 次调用,其中 N 是您拥有的对象数。这是每个定价页面的 A 类操作。 您好,刚刚登录,感谢您的帮助。我试图使用 find 但不支持,因此在搜索替代方案时偶然发现了您的答案。这是一个很大的帮助。 gsutil 解决方案在 gsutil v 4.15 @jterrace 中运行良好,但前提是您列出的存储桶/路径中没有“子目录”。如果有子目录, du 将汇总该目录下文件的大小并为该目录打印一行到标准输出(使文件计数不正确)。抱歉,老问题更新晚了。 虽然 gsutil ls -lworks 在 Windows 中有一种方法(没有 tail 或 ws)来获取摘要而无需列出整个存储桶内容【参考方案6】:

您想将gsutil ls -count -recursive 加入gs://bucket/folder 吗? 好的; gsutil ls gs://bucket/folder/** 将仅列出 gs://bucket/folder 下文件路径的完整 url,不包括页脚或以冒号结尾的行。将其传送到 wc -l 将为您提供结果的行数。

gsutil ls gs://bucket/folder/** | wc -l

【讨论】:

为什么要使用** 而不仅仅是* @northtree 我认为在这种情况下它可能是等效的,但是 ** 确实可以同时用于多个级别,所以我认为 /folder/**/*.js 会在文件夹之后的任何目录深度下找到所有 js 文件(文件夹本身除外),而/folder/*/*.js 仅适用于文件夹中目录中的 js 文件。

以上是关于如何使用 gsutil 计算存储桶文件夹中的文件数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 计算目录中的文件数

Gsutil - 如何使用 Gsutil 检查 GCS 存储桶(子目录)中是不是存在文件

如何使用 gsutil 从 GCE 上的容器中复制存储桶中的文件

Google Cloud Storage:如何使用 gsutil 获取存储桶/文件夹中的新文件列表

如何使用 gsutil 命令列出 gcs 存储桶中的所有文件(包含所有文件夹)以匹配文件内容中的特定字符串

如何列出 aws S3 存储桶目录中的项目