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

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

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

【问题讨论】:

    标签: google-cloud-storage gsutil


    【解决方案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 功能订阅新对象。

    【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-09-16
      • 2016-09-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      • 2020-06-22
      • 2017-05-31
      • 2023-03-28
      相关资源
      最近更新 更多