【问题标题】:AWS CLI Download list of S3 filesAWS CLI 下载 S3 文件列表
【发布时间】:2017-08-17 12:52:47
【问题描述】:

我们在私有 S3 存储桶中有大约 400,000 个文件,这些文件是入站/出站通话记录。这些文件具有特定的模式,可以让我搜索入站和出站号码。请注意,这些调用是在 Glacier 存储类

上进行的

使用 AWS CLI,我可以搜索此存储桶并 grep 我需要的文件。我现在想做的是启动 S3 恢复作业以加快检索(所以恢复时间约为 1-5 分钟),然后可能在 30 分钟后运行命令下载文件。

到目前为止我的努力:

aws s3 ls s3://exetel-logs/ --recursive | grep .*042222222.* | cut -c 32-

检索大约 200 个文件的密钥。我不确定下一步如何进行,因为aws s3 cp 不适用于存储类中的任何对象。

干杯,

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-cli


    【解决方案1】:

    AWS CLI 有两个用于 S3 的单独命令:s3s3apis3 是具有有限功能的高级抽象,因此要恢复文件,您必须使用 s3api 提供的命令之一:

    aws s3api restore-object --bucket exetel-logs --key your-key
    

    如果你之后想复制文件,但又想确保只复制从 Glacier 恢复的文件,可以使用以下代码 sn-p:

    for key in $(aws s3api list-objects-v2 --bucket exetel-logs --query "Contents[?StorageClass=='GLACIER'].[Key]" --output text); do
      if [ $(aws s3api head-object --bucket exetel-logs --key ${key} --query "contains(Restore, 'ongoing-request=\"false\"')") == true ]; then
        echo ${key}
      fi
    done
    

    【讨论】:

    • 很好的答案,除了从冰川存储类恢复的对象不应随后显示为STANDARD。由于几个不同的原因,这似乎是不可能的。我认为没有办法将恢复状态与对象列表区分开来。应该需要head-object
    • 感谢您的指出。我修复了答案中的代码 sn-p。
    【解决方案2】:

    您是否考虑过为 AWS CLI 使用高级语言包装器?它将使这些类型的任务更容易集成到您的工作流程中。我更喜欢 Python 实现(Boto 3)。 Here 是如何从 S3 存储桶下载所有文件的示例代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-02
      • 2020-11-22
      • 2021-07-17
      相关资源
      最近更新 更多