我想从S3下载完整的存储库。我知道可以在https://s3.amazonaws.com/big-data-benchmark/pavlo
访问该存储桶我想要/pavlo/sequence-snappy/5nodes
如何使用wget等现成工具以最少的手动努力下载此内容? (s3工具需要一个实际的s3帐户,这是我没有和想要的。)
答案 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可以处理许多并行请求,因此您可能希望并行化该过程。