Amazon S3 恢复已删除的文件

von*_*gen 31 amazon-s3 amazon-web-services

是否可以恢复我从 S3 存储桶中删除的文件?

小智 58

如果您启用了版本控制,是的,您可以!在版本化存储桶上,对文件的删除操作不会真正删除它,但会添加带有“删除标记”的版本。您可以使用 AWS CLI 删除删除标记:

aws s3api delete-object --bucket yourbucket-name --key "yourfile" --version-id id_of_the_delete_marker
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令获取存储桶中的所有文件

aws --output text s3api list-object-versions --bucket yourbucket-name > files.txt
Run Code Online (Sandbox Code Playgroud)

如果您想取消删除存储桶中的所有文件,您可以尝试:

echo '#!/bin/bash' > undeleteScript.sh && aws --output text s3api list-object-versions --bucket yourbucket-name | grep -E "^DELETEMARKERS" | awk '{FS = "[\t]+"; print "aws s3api delete-object --bucket yourbucket-name --key \42"$3"\42 --version-id "$5";"}' >> undeleteScript.sh && . undeleteScript.sh; rm -f undeleteScript.sh;
Run Code Online (Sandbox Code Playgroud)

  • 为什么这不是公认的答案?@vonhogen 请重新考虑您的选择:) (2认同)
  • 如果您只想恢复 S3 中一组特定“目录”中的文件(技术上以特定前缀开头的存储桶中的键),请将 --prefix your/dir/path 添加到@Chris Cinelli 的第三个脚本行的开头, 就在 `grep` 之前 ... `echo '#!/bin/bash' > undeleteScript.sh && aws --output text s3api list-object-versions --bucket yourbucket-name --prefix your/dir/path / | grep -E "^DELETEMARKERS" | awk '{FS = "[\t]+"; 打印 "aws s3api delete-object --bucket yourbucket-name --key \42"$3"\42 --version-id "$5";"}' >> undeleteScript.sh && 。取消删除脚本.sh; rm -f undeleteScript.sh;` (2认同)

Dav*_*ebb 21

根据Amazon S3 文档:

一旦删除,就无法恢复或取消删除对象。

  • 为了给某些人带来希望,现在如果您的存储桶启用了版本控制,您可以取消删除文件。 (3认同)