【问题标题】:How to find a file in Amazon S3 bucket without knowing the containing folder如何在不知道包含文件夹的情况下在 Amazon S3 存储桶中查找文件
【发布时间】:2015-12-29 01:57:34
【问题描述】:

我的 Amazon S3 存储桶的文件夹结构如下所示。

  • 桶名\00001\file1.txt
  • 桶名\00001\file2.jpg
  • 桶名\00002\file3.doc
  • 桶名\00001\file4.ppt

如果我只知道文件名 file3.doc 和存储桶名称 bucket-name 我如何在 中搜索 file3.doc >存储桶名称。如果我知道它在文件夹 00002 中,我可以简单地转到该文件夹​​并开始输入文件名,但我无法知道我正在搜索的文件在哪个文件夹中。

【问题讨论】:

  • 不幸的是,我认为您的选择有限。递归循环可能是你最好的。 S3 不应该以这种方式使用
  • 您希望以编程方式获取它,还是命令行就足够了?您在什么情况下查找文件(例如,它是一次性请求、常规工作、更大应用程序的一部分等)?

标签: amazon-web-services amazon-s3


【解决方案1】:

您可以使用 AWS CLI 轻松完成此操作。

aws s3 ls s3://BUCKET-NAME/ --recursive | grep FILE-NAME.TXT

【讨论】:

  • 这应该是最佳答案,因为它正确回答了问题
  • 我们可以使用相同的命令来查找文件夹而不是文件吗? aws s3 ls s3://BUCKET-NAME/ --recursive | grep FOLDER-NAME
【解决方案2】:

仅使用 AWS CLI,您可以使用 --query 参数对存储桶运行 list-objects。这不会是一个快速的操作,因为它在获取文件列表后在本地运行,而不是在 s3 的 api 中运行。

$ aws s3api list-objects --bucket bucket-name --query "Contents[?contains(Key, 'file3')]"

[
    {
        "LastModified": "2017-05-31T20:36:28.000Z",
        "ETag": "\"b861daa5cc3775f38519f5de6566cbe7\"",
        "StorageClass": "STANDARD",
        "Key": "00002/file3.doc",
        "Owner": {
            "DisplayName": "owner",
            "ID": "123"
        },
        "Size": 27032
    }
]

使用--query 而不是仅仅通过管道传递到 grep 的好处是,您将获得完整的响应,包括通常包含在 list-objects 中的所有可用元数据,而不必在 grep 的前后参数中胡乱摆弄。

有关更多信息,请参阅Finding Files in S3 上的此帖子,包括一个类似的示例,该示例显示了当同名文件最终位于不同目录中时拥有元数据的好处。

【讨论】:

    【解决方案3】:

    如果您根本不知道它在哪里,您可能需要使用像 s3cmd 这样的命令行工具:

    s3cmd --recursive ls s3://mybucket | grep "file3"
    

    但可以进行一些有限的搜索:

    https://stackoverflow.com/a/21836343/562557

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    • 2020-06-14
    • 2018-09-20
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    相关资源
    最近更新 更多