假设我有一个名为Test的存储桶,其中包含文件夹Alpha / TestingOne,Alpha / TestingTwo。我想使用aws cli检查我的存储桶中是否存在一个名为Alpha / TestingThree的文件夹。我确实尝试过
s3api head-object --bucket Test --key Alpha/TestingThree
但是,似乎对象是文件而不是文件夹。因此,有没有一种方法可以使用aws cli api检查as s3中是否存在文件夹。
答案 0 :(得分:1)
使用aws cli,
aws s3 ls s3://Test/Alpha/TestingThree
如果存在,则显示如下,否则返回nothting。
PRE TestingThree
请注意,S3是平面结构(实际上没有目录之类的层次结构)。 https://docs.aws.amazon.com/AmazonS3/latest/user-guide/using-folders.html
答案 1 :(得分:1)
似乎没有没有方法来测试s3存储桶中是否存在“ 文件夹”。那应该与某种事实有关,即一切都是带有键/值的“对象”。
作为一种选择,您可以利用list-objects-v2或list-objects检查前缀(也称为“ 文件夹”)的“内容”:
$ aws s3api list-objects-v2 --bucket <bucket_name> --prefix <non_exist_prefix_name> --query 'Contents[]'
null
不存在的前缀(又名'文件夹')将始终为此类查询返回'null'。然后,您可以将其与“ 空”值进行比较:
$ test "$result" == "null" && echo 'yes' || echo 'no'
答案 2 :(得分:0)
Amazon S3中实际上不存在文件夹。例如,您可以使用以下命令:
aws s3 cp foo.txt s3://my-bucket/folder1/folder2/foo.txt
即使folder1
和folder2
不存在,此操作也将成功进行。这是因为Amazon S3对象的文件名(Key
)包含完整路径。 Amazon S3是不使用文件夹的平面存储系统。但是,为了使人们更容易使用,S3管理控制台使它像显示文件夹一样“显示”,并且可以列出具有CommonPrefix
(类似于路径)的对象。
如果在S3管理控制台中创建了一个新文件夹,它实际上会创建一个长度与该文件夹同名的零长度对象。即使它们实际上不存在,这也可以显示“空文件夹”。