当前位置:  开发笔记 > 编程语言 > 正文

AWS S3:如何使用bash检查存储桶中是否存在文件

如何解决《AWSS3:如何使用bash检查存储桶中是否存在文件》经验,为你挑选了4个好方法。

我想知道是否可以检查某个存储桶中是否存在某些文件.

这就是我发现的:

使用s3cmd检查文件是否在S3存储桶中

它应该解决我的问题,但由于某种原因它不断返回该文件不存在,而它确实存在.这个解决方案也有点过时,不使用该doesObjectExist方法.

可以在Amazon S3 Web服务中使用的所有方法的摘要

这给出了如何使用此方法的语法,但我似乎无法使其工作.

他们是否希望您创建一个布尔变量来保存方法的状态,或者该函数是否直接为您提供输出/抛出错误?

这是我目前在我的bash脚本中使用的代码:

existBool=doesObjectExist(${BucketName}, backup_${DomainName}_${CurrentDate}.zip)

if $existBool ; then
        echo 'No worries, the file exists.'
fi

我只使用文件名来测试它,而不是给出完整路径.但由于我得到的错误是语法错误,我可能只是错误地使用它.

希望有人可以帮助我,告诉我我做错了什么.

!编辑

我最终寻找另一种方法来做到这一点,因为使用doesObjectExist不是最快或最简单的.



1> Dave Maple..:

上次我看到性能比较getObjectMetadata是检查对象是否存在的最快方法.使用AWS cli作为head-object方法,示例:

aws s3api head-object --bucket www.codeengine.com --key index.html

返回:

{
    "AcceptRanges": "bytes",
    "ContentType": "text/html; charset=utf-8",
    "LastModified": "Sun, 08 Jan 2017 22:49:19 GMT",
    "ContentLength": 38106,
    "ContentEncoding": "gzip",
    "ETag": "\"bda80810592763dcaa8627d44c2bf8bb\"",
    "StorageClass": "REDUCED_REDUNDANCY",
    "CacheControl": "no-cache, no-store",
    "Metadata": {}
}


我喜欢这个,因为它还验证你正在检查的是一个对象.使用aws s3 ls在这方面有点过于宽容.

2> 小智..:

请注意,即使答案被接受,"aws s3 ls"仍然不能正常工作.它按前缀搜索,而不是按特定对象键搜索.当有人通过在文件名的末尾添加"1"来重命名文件时,我发现这很难,并且存在检查仍将返回True.

(试图将其添加为评论,但还没有足够的代表.)



3> 小智..:

一种简单的方法是使用 aws s3 ls

exists=$(aws s3 ls $path_to_file)
if [ -z "$exists" ]; then
  echo "it does not exist"
else
  echo "it exists"
fi


对不起,如果我听起来太苛刻,但由于其他两个帖子中解释的原因,这不应该被接受作为答案.

4> ItayB..:

继@DaveMaple和@MichaelGlenn答案之后,这是我使用的条件:

aws s3api head-object --bucket  --key  || not_exist=true
if [ $not_exist ]; then
  echo "it does not exist"
else
  echo "it exists"
fi

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有