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

Posted

技术标签:

【中文标题】Google Cloud Storage:如何使用 gsutil 获取存储桶/文件夹中的新文件列表【英文标题】:Google Cloud Storage: How to get list of new files in bucket/folder using gsutil 【发布时间】:2017-10-16 11:31:09 【问题描述】:

我有一个存储桶/文件夹,每分钟都会有很多文件进入其中。 如何根据文件时间戳只读取新文件。

例如:列出所有带有时间戳的文件 > my_timestamp

【问题讨论】:

【参考方案1】:

你可以使用一些 bash-fu:

gsutil ls -l gs://<your-bucket-name> | sort -k2n | tail -n1 | awk 'END $1=$2=""; sub(/^[ \t]+/, ""); print '

分解:

# grab detailed list of objects in bucket
gsutil ls -l gs://your-bucket-name 

# sort by number on the date field
sort -k2n

# grab the last row returned 
tail -n1

# delete first two cols (size and date) and ltrim to remove whitespace
awk 'END $1=$2=""; sub(/^[ \t]+/, ""); print '`

使用 Google Cloud SDK v186.0.0、gsutil v4.28 测试

【讨论】:

这个解决方案非常脆弱,如果谷歌决定稍微改变一下格式,它很容易崩溃 @remisharoon 您在最初的问题中从未要求超级健壮。我会将gsutil 版本号添加到我的答案中,以便人们了解。 在较新的 Google CloudSDK 190.0.1 和 gsutil 4.28 上适用于我的更新:gsutil ls -l gs://your-bucket-name | sort -k2 | tail -n2 | head -n1 | awk 'END $1=$2=""; sub(/^[ \t]+/, ""); print ' 在输出排序结果时是否可以选择 asc 或 dsc 顺序【参考方案2】:

这不是 gsutil 或 GCS API 提供的功能,因为无法按时间戳列出对象。

相反,您可以使用GCS Cloud Pub/Sub 功能订阅新对象。

【讨论】:

+1。有关如何使用 gsutil 进行设置的示例,请参阅此问题:***.com/questions/43074834/…【参考方案3】:

如果您对新文件感兴趣,或者我们可以说目标存储桶中不存在的文件,那么您也可以使用 gsutil -n 选项,因为它仅复制目标存储桶中不存在的文件。

来自文档 https://cloud.google.com/storage/docs/gsutil/commands/cp?hl=ru

没有破坏。指定后,目标位置的现有文件或对象将不会被覆盖。任何被此选项跳过的项目都将被报告为被跳过。此选项将在尝试上传数据之前执行额外的 GET 请求以检查项目是否存在。这将节省重传数据,但额外的 HTTP 请求可能会使小对象传输更慢且成本更高。

这种方法的缺点是,它会对源存储桶中存在的每个文件发出检查请求

【讨论】:

以上是关于Google Cloud Storage:如何使用 gsutil 获取存储桶/文件夹中的新文件列表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Ruby 作为后端将 React 上的图像上传到 Google Cloud Storage

使用 PyArrow + Parquet + Google Cloud Storage 时如何实现谓词下推?

如何使用 Python API 在 Google Cloud Storage 上上传文件夹

如何使用自己的身份验证系统控制对 Google Cloud Storage 对象的访问?

如何使用 PHP 在 Firebase 中自动导入存储桶 - Google Cloud Storage

iOS- 如何在运行时使用Google Cloud Storage在gitHub工作流程中注入gc_keys.json文件?