有没有办法使用aws cli检查s3中是否存在文件夹?

arp*_*shi 4 amazon-s3 aws-cli

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

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

但似乎 head-object 是用于 files 而不是 folders 。那么有没有办法使用 aws cli api 检查 aws s3 中是否存在文件夹。

Rya*_*Kim 11

使用 aws cli,

aws s3 ls s3://Test/Alpha/TestingThree
Run Code Online (Sandbox Code Playgroud)

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

                           PRE TestingThree
Run Code Online (Sandbox Code Playgroud)

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

  • 对于“bash”,您可以使用“if [[ $(aws s3 ls s3://mybucket/myfolder | head) ]]; 然后回显“做事”;else echo "文件夹不存在"; 菲` (7认同)

小智 6

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

作为一个选项,您可以使用 list-objects-v2 或 list-objects 来检查前缀(也称为“文件夹”)的“内容”:

$ aws s3api list-objects-v2 --bucket <bucket_name> --prefix <non_exist_prefix_name> --query 'Contents[]'
null
Run Code Online (Sandbox Code Playgroud)

对于此类查询,不存在的前缀(也称为“文件夹”)将始终返回“null”。然后您可以对“ null ”值进行比较:

$ test "$result" == "null" && echo 'yes' || echo 'no'
Run Code Online (Sandbox Code Playgroud)

  • 我正在使用这个,并用 --max-items 0 限制响应 (2认同)