如何在不知道包含文件夹的情况下在Amazon S3存储桶中查找文件

Fre*_*ers 5 amazon-s3 amazon-web-services

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

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

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

hfr*_*nco 15

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

aws s3 ls s3://BUCKET-NAME/ --recursive | grep FILE-NAME.TXT
Run Code Online (Sandbox Code Playgroud)

  • 这应该是最佳答案,因为它正确回答了问题 (2认同)

Luk*_*ite 7

仅使用AWS CLI,您可以list-objects对带有--query参数的存储桶运行a 。这不是一个快速的操作,因为它在获取文件列表后在本地运行,而不是在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
    }
]
Run Code Online (Sandbox Code Playgroud)

使用--query仅管道传递给grep 的好处是,您将获得完整的响应,包括通常包含在中的所有可用元数据list-objects,而无需花很多时间在grep的参数前后。

请参阅有关在S3中查找文件的更多信息,包括一个类似的示例,该示例显示了当同名文件最终位于不同目录中时使用元数据的好处。


the*_*ict 3

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

s3cmd --recursive ls s3://mybucket | grep "file3"
Run Code Online (Sandbox Code Playgroud)

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

/sf/answers/1528544041/

  • 如今,通常建议使用 [AWS 命令​​行界面 (CLI)](http://aws.amazon.com/cli/),它具有适用于所有 AWS 服务(不仅仅是 Amazon S3)的功能。 (5认同)