Google 云存储:如何使用 gsutil 获取 bucket/folder 中的新文件列表
Google Cloud Storage: How to get list of new files in bucket/folder using gsutil
我有一个 bucket/folder,每分钟都会收到大量文件。
如何根据文件时间戳只读取新文件。
例如:列出时间戳 > my_timestamp
的所有文件
这不是 gsutil 或 GCS API 提供的功能,因为无法按时间戳列出对象。
相反,您可以使用 GCS Cloud Pub/Sub 功能订阅新对象。
你可以使用一些 bash-fu:
gsutil ls -l gs://<your-bucket-name> | sort -k2n | tail -n1 | awk 'END {==""; 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 {==""; sub(/^[ \t]+/, ""); print }'`
已使用 Google Cloud SDK v186.0.0
、gsutil v4.28
进行测试
如果您对新文件感兴趣,或者我们可以换句话说,目标存储桶中不存在的文件,那么您也可以使用 gsutil -n 选项,因为它只复制目标中不存在的文件桶.
来自文档
https://cloud.google.com/storage/docs/gsutil/commands/cp?hl=ru
No-clobber。指定后,目标中的现有文件或对象将不会被覆盖。此选项跳过的任何项目都将被报告为已跳过。此选项将执行额外的 GET 请求,以在尝试上传数据之前检查项目是否存在。这将节省重传数据,但额外的 HTTP 请求可能会使小对象传输更慢且成本更高。
这种方法的缺点是,它会为源存储桶中存在的每个文件发出检查请求
我有一个 bucket/folder,每分钟都会收到大量文件。 如何根据文件时间戳只读取新文件。
例如:列出时间戳 > my_timestamp
的所有文件这不是 gsutil 或 GCS API 提供的功能,因为无法按时间戳列出对象。
相反,您可以使用 GCS Cloud Pub/Sub 功能订阅新对象。
你可以使用一些 bash-fu:
gsutil ls -l gs://<your-bucket-name> | sort -k2n | tail -n1 | awk 'END {==""; 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 {==""; sub(/^[ \t]+/, ""); print }'`
已使用 Google Cloud SDK v186.0.0
、gsutil v4.28
如果您对新文件感兴趣,或者我们可以换句话说,目标存储桶中不存在的文件,那么您也可以使用 gsutil -n 选项,因为它只复制目标中不存在的文件桶.
来自文档 https://cloud.google.com/storage/docs/gsutil/commands/cp?hl=ru
No-clobber。指定后,目标中的现有文件或对象将不会被覆盖。此选项跳过的任何项目都将被报告为已跳过。此选项将执行额外的 GET 请求,以在尝试上传数据之前检查项目是否存在。这将节省重传数据,但额外的 HTTP 请求可能会使小对象传输更慢且成本更高。
这种方法的缺点是,它会为源存储桶中存在的每个文件发出检查请求