【问题标题】:How to restore multiple files from a prefix in AWS如何从 AWS 中的前缀恢复多个文件
【发布时间】:2021-05-13 18:33:11
【问题描述】:

我在 AWS S3 Glacier 中有很多对象,我正在尝试恢复其中一些位于相同前缀(又名文件夹)上的对象。但是我找不到一次恢复它们的方法,值得一提的是,这个前缀中的一些元素本身就是我也想恢复的前缀。

【问题讨论】:

  • 没错。 RestoreObject() 命令只恢复单个对象。您是否尝试过在 Amazon S3 管理控制台中选择文件夹并选择“启动还原”?还是您想以编程方式进行?

标签: amazon-web-services amazon-s3 amazon-glacier


【解决方案1】:

我已经设法让它工作了。我必须编写一个简单的 bash 脚本,根据具体情况遍历存储桶前缀中的所有对象,这些对象是 GLACIERDEEP_ARCHIVE。所以这有两个组成部分:

首先,您需要一个包含所有对象的文件:

aws s3api list-objects-v2 --bucket someBucket --prefix 
some/prefix/within/the/bucket/ --query "Contents[?StorageClass== 'GLACIER']" 
-- output text | awk '{print $2}' > somefile.txt

list-objects-v2 将列出前缀中的所有对象,使用awk '{print $2}' 命令我们将确保生成的文件是可迭代的并且只包含对象的名称。

最后,遍历恢复对象的文件:

for i in $(cat somefile.txt); 
do
    #echo "Sending request for object: $i"
    aws s3api restore-object --bucket $BUCKET --key $i --restore-request Days=$DAYS
    #echo "Request sent for object: $i"  
done

您可以取消注释echo 命令以使执行更详细,但大多数情况下没有必要。

【讨论】:

    【解决方案2】:

    这可以通过s3cmd (https://s3tools.org/s3cmd) 轻松完成。

    您可以将restore 命令与--recursive 选项一起使用。无需先收集要恢复的对象列表。您只需要指定恢复对象的天数和恢复的优先级。

    例子:

    s3cmd restore  --recursive s3://BUCKET-NAME/[PREFIX/TO/OBJECTS] --restore-days=60 --restore-priority=standard
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-23
      • 2019-05-13
      • 2016-07-20
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      • 2014-09-10
      相关资源
      最近更新 更多