我注意到似乎没有从AWS管理控制台下载整个s3桶的选项。
有什么简单的方法可以把所有东西都装进我的桶里吗?我正在考虑使根文件夹公共,使用wget抓取它,然后再次使它私有,但我不知道是否有更简单的方法。
我注意到似乎没有从AWS管理控制台下载整个s3桶的选项。
有什么简单的方法可以把所有东西都装进我的桶里吗?我正在考虑使根文件夹公共,使用wget抓取它,然后再次使它私有,但我不知道是否有更简单的方法。
当前回答
AWS CLI是在本地下载整个S3存储桶的最佳选择。
安装AWS CLI。 配置AWS CLI以使用默认的安全凭据和默认的AWS区域。 下载整个S3桶使用命令 Aws s3 sync s3://yourbucketname localpath
不同AWS服务的AWS CLI参考:AWS命令行接口
其他回答
@Layke的回答很好,但如果你有大量的数据,不想永远等待,你应该阅读“AWS CLI S3配置”。
以下命令将告诉AWS CLI使用1,000个线程执行作业(每个小文件或多部分副本的一部分),并查看100,000个作业:
aws configure set default.s3.max_concurrent_requests 1000
aws configure set default.s3.max_queue_size 100000
运行这些之后,你可以使用简单的sync命令:
aws s3 sync s3://source-bucket/source-path s3://destination-bucket/destination-path
or
aws s3 sync s3://source-bucket/source-path c:\my\local\data\path
在一个拥有4核CPU和16GB RAM的系统上,对于像我这样的情况(3-50GB文件),同步/复制速度从9.5MiB/s提高到700+MiB/s,比默认配置提高了70倍。
如果您使用带有S3Fox的Firefox,它确实允许您选择所有文件(shift-选择第一个和最后一个),然后右键单击并下载所有文件。
我已经处理了500多个文件,没有任何问题。
如果您只想从AWS下载桶,请首先在您的计算机中安装AWS CLI。在终端更改目录到你想下载的文件,并运行这个命令。
aws s3 sync s3://bucket-name .
如果你也想同步本地和s3目录(如果你在本地文件夹中添加了一些文件),运行这个命令:
aws s3 sync . s3://bucket-name
aws s3 sync s3://<source_bucket> <local_destination>
是一个很好的答案,但它不会工作,如果对象在存储类冰川灵活检索,即使文件已经恢复。在这种情况下,你需要添加标志——force-glacier-transfer。
这里有一些东西可以下载所有桶,列出它们,列出它们的内容。
//connection string
private static void dBConnection() {
app.setAwsCredentials(CONST.getAccessKey(), CONST.getSecretKey());
conn = new AmazonS3Client(app.getAwsCredentials());
app.setListOfBuckets(conn.listBuckets());
System.out.println(CONST.getConnectionSuccessfullMessage());
}
private static void downloadBucket() {
do {
for (S3ObjectSummary objectSummary : app.getS3Object().getObjectSummaries()) {
app.setBucketKey(objectSummary.getKey());
app.setBucketName(objectSummary.getBucketName());
if(objectSummary.getKey().contains(CONST.getDesiredKey())){
//DOWNLOAD
try
{
s3Client = new AmazonS3Client(new ProfileCredentialsProvider());
s3Client.getObject(
new GetObjectRequest(app.getBucketName(),app.getBucketKey()),
new File(app.getDownloadedBucket())
);
} catch (IOException e) {
e.printStackTrace();
}
do
{
if(app.getBackUpExist() == true){
System.out.println("Converting back up file");
app.setCurrentPacsId(objectSummary.getKey());
passIn = app.getDataBaseFile();
CONVERT= new DataConversion(passIn);
System.out.println(CONST.getFileDownloadedMessage());
}
}
while(app.getObjectExist()==true);
if(app.getObjectExist()== false)
{
app.setNoObjectFound(true);
}
}
}
app.setS3Object(conn.listNextBatchOfObjects(app.getS3Object()));
}
while (app.getS3Object().isTruncated());
}
/---------------------------- 扩展方法 -------------------------------------/
//Unzip bucket after download
public static void unzipBucket() throws IOException {
unzip = new UnZipBuckets();
unzip.unZipIt(app.getDownloadedBucket());
System.out.println(CONST.getFileUnzippedMessage());
}
//list all S3 buckets
public static void listAllBuckets(){
for (Bucket bucket : app.getListOfBuckets()) {
String bucketName = bucket.getName();
System.out.println(bucketName + "\t" + StringUtils.fromDate(bucket.getCreationDate()));
}
}
//Get the contents from the auto back up bucket
public static void listAllBucketContents(){
do {
for (S3ObjectSummary objectSummary : app.getS3Object().getObjectSummaries()) {
if(objectSummary.getKey().contains(CONST.getDesiredKey())){
System.out.println(objectSummary.getKey() + "\t" + objectSummary.getSize() + "\t" + StringUtils.fromDate(objectSummary.getLastModified()));
app.setBackUpCount(app.getBackUpCount() + 1);
}
}
app.setS3Object(conn.listNextBatchOfObjects(app.getS3Object()));
}
while (app.getS3Object().isTruncated());
System.out.println("There are a total of : " + app.getBackUpCount() + " buckets.");
}
}