【问题标题】:How to retrieve the most recent file in cloud storage bucket?如何检索云存储桶中的最新文件?
【发布时间】:2018-01-27 09:12:05
【问题描述】:

这可以用 gsutil 完成吗?

https://cloud.google.com/storage/docs/gsutil/commands/ls 似乎没有提及任何排序功能 - 仅按日期过滤 - 这不适用于我的用例。

【问题讨论】:

标签: google-cloud-platform google-cloud-storage gsutil


【解决方案1】:

您好,这似乎仍然不存在,但这篇文章中有一个解决方案:enter link description here

使用的命令是这个:

gsutil ls -l gs://[bucket-name]/ | sort -k 2

由于它允许您按日期过滤,因此您可以获得存储桶中的最新结果,并在需要时使用另一个管道恢复最后一行。

【讨论】:

    【解决方案2】:
    gsutil ls -l gs://<bucket-name> | sort -k 2 | tail -n 2 | head -1 | cut -d ' ' -f 7
    

    如果桶中的对象少于两个,它将无法正常工作

    【讨论】:

      【解决方案3】:

      通过在主机上使用gsutil,这将填充响应数组:

      response=(`gsutil ls -l gs://some-bucket-name|sort -k 2|tail -2|head -1`)
      

      或者来自 docker 容器的 gsutil

      response=(`docker run --name some-container-name --rm --volumes-from gcloud-config -it google/cloud-sdk:latest gsutil ls -l gs://some-bucket-name|sort -k 2|tail -2|head -1`)
      

      然后,要获得整个响应,请运行:

      echo ${response[@]}
      

      将打印例如:

      33 2021-08-11T09:24:55Z gs://some-bucket-name/filename-37.txt
      

      或者从响应中获取单独的信息,(例如文件名)

      echo ${response[2]}
      

      只打印文件名

      gs://some-bucket-name/filename-37.txt
      

      【讨论】:

        【解决方案4】:

        对于我的用例,我想在我的存储桶中找到最新的目录。我按升序对它们进行编号(前导零),所以我需要得到最新的就是这样:

        gsutil ls -l gs://[bucket-name] | sort | tail -n 1 | cut -d '/' -f 4
        
        1. 列出目录
        2. 按字母顺序排序(可能没有必要)
        3. 取最后一行
        4. 使用“/”分隔符对其进行标记
        5. 获取第四个token,即目录名

        【讨论】:

        • 阅读此链接以了解顺序命名对象:cloud.google.com/storage/docs/best-practices#naming 如果您要并行上传许多对象,请避免使用顺序对象名称,例如基于时间戳的对象名称。具有顺序名称的对象是连续存储的,因此它们很可能会命中同一个后端服务器。发生这种情况时,吞吐量会受到限制。为了达到最佳吞吐量,将序列号的哈希添加为对象名称的一部分,使其不连续。
        • 我多年来一直这样做,没有任何问题...我有根文件夹 0001 0002 0003 0004 等;每个限制为 75GB;当它填满时,我继续下一个。文件夹中的文件名是文件内容的 md5 哈希值,所以可能适合上面的措辞?
        • 云存储没有文件夹。您认为文件夹只是作为对象名称一部分的前缀。桶是一个平面命名空间。除非您需要最佳性能,否则这对您来说可能无关紧要。对于需要数百万/数十亿对象的高性能的客户:具有顺序名称的对象是连续存储的,因此它们很可能会访问同一个后端服务器。我对您的回答发表了评论,以便其他人在不了解对性能的影响的情况下不要复制您的命名方案。
        • 我知道,但我将其用作服务器的备份。我应该澄清一下,我的意思是我在服务器上的文件结构。
        • 我不是想通知你。我为您的答案的未来读者发表评论。
        猜你喜欢
        • 1970-01-01
        • 2019-10-19
        • 2019-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多