在没有s3工具的情况下从s3下载公共存储桶(s3cmd)

时间:2016-06-08 10:22:04

标签: amazon-s3

我想从S3下载完整的存储库。我知道可以在https://s3.amazonaws.com/big-data-benchmark/pavlo

访问该存储桶

我想要/pavlo/sequence-snappy/5nodes

下的所有内容

如何使用wget等现成工具以最少的手动努力下载此内容? (s3工具需要一个实际的s3帐户,这是我没有和想要的。)

2 个答案:

答案 0 :(得分:0)

虽然需要一些手动工作,但这是如何做到的:

转到存储桶http网址并添加?marker=/pavlo/sequence-snappy/5nodes,结果为https://s3.amazonaws.com/big-data-benchmark/pavlo/sequence-snappy/5nodes

现在,手动二进制搜索数据集的大小。幸运的是,您的特定存储桶的列表是可预测的,它似乎有100个项目,范围从000000_0-000099_0

使用以下shell one-liner:

for i in {0000..0099}; do echo https://s3.amazonaws.com/big-data-benchmark/pavlo/sequence-snappy/5nodes/rankings/00${i}_0; done | xargs -n1 -P8 wget

最好我们想要一个更通用的解决方案,它也适用于不可预测的文件名。

答案 1 :(得分:0)

我认为您会发现S3工具不需要帐户匿名访问公共存储桶。 (我也不明白为什么有人不想要一个免费帐户,但我离题了。)

但是这里有一个解决方案,当密钥(路径/文件名)未知或可预测时有效:

如果一个存储桶是真正公开的,就像这个存储桶一样,你会发现存储桶根部的所有密钥的分页XML列表。

例如,

curl -v https://s3.amazonaws.com/big-data-benchmark/

每个<Key>包含对象的路径。这是List Objects V1 API,因此您可以在下一个请求中添加?marker=和列表中最后一个键的值,以恢复列表,重复此过程,直到<IsTruncated>为否更长的时间。

通过将密钥附加到存储区URL,使用此构建列表以传递给curl,wget或您选择的http客户端。 S3可以处理许多并行请求,因此您可能希望并行化该过程。