【问题标题】:Is there a way to check if folder exists in s3 using aws cli?有没有办法使用 aws cli 检查 s3 中是否存在文件夹?
【发布时间】:2020-05-29 17:05:18
【问题描述】:

假设我有一个名为 Test 的存储桶,其中包含文件夹 Alpha/TestingOne,Alpha/TestingTwo 。我想使用 aws cli 检查我的存储桶中是否存在名为 Alpha/TestingThree 的文件夹。我确实尝试过 aws

s3api head-object --bucket Test --key Alpha/TestingThree

但似乎头对象是文件而不是文件夹。那么有没有办法使用 aws cli api 检查 aws s3 中是否存在文件夹。

【问题讨论】:

  • 为什么需要检查它是否存在?

标签: amazon-s3 aws-cli


【解决方案1】:

使用 aws cli,

aws s3 ls s3://Test/Alpha/TestingThree

如果存在则如下所示,否则不返回任何内容。

                           PRE TestingThree

请注意,S3 是平面结构(实际上没有像目录这样的层次结构)。 https://docs.aws.amazon.com/AmazonS3/latest/user-guide/using-folders.html

【讨论】:

  • 对于bash,可以使用if [[ $(aws s3 ls s3://mybucket/myfolder | head) ]]; then echo "do stuff"; else echo "folder does not exist"; fi
【解决方案2】:

文件夹实际上并不存在于 Amazon S3 中。例如,您可以使用以下命令:

aws s3 cp foo.txt s3://my-bucket/folder1/folder2/foo.txt

即使folder1folder2 不存在,这也会成功。这是因为 Amazon S3 对象的文件名 (Key) 包含完整路径。 Amazon S3 是一个不使用文件夹的平面存储系统。然而,为了让人们更轻松,S3 管理控制台让它“显示”为好像有文件夹,并且可以列出具有CommonPrefix(类似于路径)的对象。

如果在 S3 管理控制台中创建了一个新文件夹,它实际上会创建一个与该文件夹同名的零长度对象。这样可以显示“空文件夹”,即使它们实际上并不存在。

【讨论】:

    【解决方案3】:

    似乎没有方法可以测试 s3 存储桶中是否存在“文件夹”。这应该与一切都是具有键/值的“对象”这一事实有关。

    作为一种选择,您可以使用 list-objects-v2 或 list-objects 来检查前缀(又名“文件夹”)的“内容”:

    $ aws s3api list-objects-v2 --bucket <bucket_name> --prefix <non_exist_prefix_name> --query 'Contents[]'
    null
    
    不存在的

    前缀(又名“文件夹”)对于此类查询将始终返回“null”。然后您可以使用与 'null' 值的比较:

    $ test "$result" == "null" && echo 'yes' || echo 'no'
    

    【讨论】:

    • 我正在使用它,并使用 --max-items 0 限制响应
    猜你喜欢
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 2021-08-22
    • 2010-10-26
    • 1970-01-01
    • 2019-03-16
    相关资源
    最近更新 更多