Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何在不知道包含文件夹的情况下在AmazonS3 bucket中查找文件_Amazon Web Services_Amazon S3 - Fatal编程技术网

Amazon web services 如何在不知道包含文件夹的情况下在AmazonS3 bucket中查找文件

Amazon web services 如何在不知道包含文件夹的情况下在AmazonS3 bucket中查找文件,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,我的AmazonS3存储桶有一个如下所示的文件夹结构 bucket name\00001\file1.txt bucket name\00001\file2.jpg bucket name\00002\file3.doc bucket name\00001\file4.ppt 如果我只知道文件名file3.doc和bucket namebucket name如何在bucket name中搜索file3.doc。如果我知道,它在文件夹00002中,我可以简单地转到文件夹并开始键入文件名,但我无

我的AmazonS3存储桶有一个如下所示的文件夹结构

  • bucket name\00001\file1.txt
  • bucket name\00001\file2.jpg
  • bucket name\00002\file3.doc
  • bucket name\00001\file4.ppt

如果我只知道文件名file3.doc和bucket namebucket name如何在bucket name中搜索file3.doc。如果我知道,它在文件夹00002中,我可以简单地转到文件夹并开始键入文件名,但我无法知道我正在搜索的文件在哪个文件夹下。

您可能需要使用命令行工具,就像您根本不知道它在哪里一样:

s3cmd --recursive ls s3://mybucket | grep "file3"
但一些有限的搜索是可能的:


仅使用AWS CLI,您可以使用
--query
参数对存储桶运行
列表对象。这不是一个快速的操作,因为它在获取文件列表后在本地运行,而不是在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的好处是,您将获得完整的响应,其中包括通常包含在
列表对象中的所有可用元数据,而不必在grep的前后参数之间胡闹


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

您可以使用AWS CLI轻松做到这一点

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

不幸的是,我认为你的选择是有限的。递归循环可能是最好的。S3不应该以这种方式使用,您是希望通过编程方式获得它,还是一个命令行就足够了?您在什么环境下查找该文件(例如,它是一次性请求、常规作业、大型应用程序的一部分等)?这些天,通常建议使用,它具有所有AWS服务的功能(不仅仅是Amazon S3)。这应该是最重要的答案,因为它正确地回答了问题