AWS CLI下载S3文件列表

时间:2017-08-14 05:08:44

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

我们在专用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不适用于存储类中的任何对象。

干杯,

2 个答案:

答案 0 :(得分:2)

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

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

如果您之后想要复制文件,但希望确保只复制从Glacier恢复的文件,则可以使用以下代码段:

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

答案 1 :(得分:0)

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