有没有一种方法可以使用aws cli检查s3中的文件夹是否存在?

时间:2019-07-09 23:12:58

标签: amazon-s3 aws-cli

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

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

但是,似乎对象是文件而不是文件夹。因此,有没有一种方法可以使用aws cli api检查as s3中是否存在文件夹。

3 个答案:

答案 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

即使folder1folder2不存在,此操作也将成功进行。这是因为Amazon S3对象的文件名(Key)包含完整路径。 Amazon S3是不使用文件夹的平面存储系统。但是,为了使人们更容易使用,S3管理控制台使它像显示文件夹一样“显示”,并且可以列出具有CommonPrefix(类似于路径)的对象。

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