AWS CLI S3:使用终端在本地复制文件:致命错误:调用HeadObject操作时发生错误(404)

时间:2017-07-14 18:28:02

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

我试图从s3存储桶本地复制文件。我可以在我的存储桶中获取文件列表:

aws s3 ls  s3://myBucket/myDirectory/todaysFiles/

但是当我尝试在本地复制文件时:

aws s3 cp s3://myBucket/myDirectory/todaysFiles/ .

我收到此错误:

fatal error: An error occurred (404) when calling the HeadObject operation: Key "myDirectory/todaysFiles/" does not exist

但我尝试在本地复制一个文件:

 aws s3 cp s3://myBucket/myDirectory/todaysFiles/somefile .

我收到此错误:

 warning: Skipping file s3://myBucket/myDirectory/todaysFiles/somefile. Object is of storage class GLACIER. Unable to perform download operations on GLACIER objects. You must restore the object to be able to the perform operation. See aws s3 download help for additional parameter options to ignore or force these transfers.

你们中的任何人都知道为什么我会收到此错误或解决此错误?

我真的很感谢你的帮助

4 个答案:

答案 0 :(得分:18)

对于第一个错误 - 添加递归标志:

.data(function(d,i) {return d[i];})

这将复制" todaysFiles"中的所有文件。目录到当前目录。

但是,第二个错误表示您的文件位于Glacier中。这有点让事情变得复杂,因为冰川不是实时的 - 取决于你愿意支付的费用,可能需要数小时才能恢复数据。有关详细信息,请参阅Restoring Objects文档。您无法从S3复制,直到将对象从Glacier恢复到S3。

请注意,如果您这样做,您将获得Glacier和S3的费用。

顺便说一句,如果这些文件实际上是今天的文件,那么在S3上的存储和推送到Glacier之间应该有更长的时间。但我猜测父目录也可能有一个与日期相关的组件。

答案 1 :(得分:1)

如果 Source 包含多个文件夹,请在最后使用 --recursive。

aws s3 cp s3Uri Local --recursive

答案 2 :(得分:0)

如果它对任何人有帮助,您也可以使用

joshuaseymour@Joshuas-MacBook-Pro ~ % sudo mdutil -E /Volumes/Library/GroupContainers/UBF8T346G9.Office/Outlook/Outlook15Profiles
Password:
Error: invalid path `/Volumes/Library/GroupContainers/UBF8T346G9.Office/Outlook/Outlook15Profiles'.

这应该可以工作,而不必使用递归。它的好处是跳过本地已经存在的文件。

正如@raju 所提到的,glacier 是 AWS 上的一个廉价存储系统,这意味着如果您想检索数据,您首先需要提出请求以获取数据,然后才能下载它。对于不经常访问的长期存储来说,它很便宜。

答案 3 :(得分:-1)

pip install --upgrade --user awscli

aws s3 cp s3://inbound/test/ /inbound/ --recursive --region us-west-2