下载整个S3存储桶?

rug*_*ert 625 amazon-s3 amazon-web-services

我注意到似乎没有从AWS管理控制台下载整个S3存储桶的选项.

有一种简单的方法可以抓住我的一个桶中的所有东西吗?我正在考虑将根文件夹设置为public,使用wget它来抓取所有内容,然后再将其设置为私有,但我不知道是否有更简单的方法.

Lay*_*yke 1183

AWS CLI

AWS CLI的文档

AWS最近发布了他们的命令行工具.这很像boto,可以使用sudo easy_install awscli或安装sudo pip install awscli

安装完成后,您可以直接运行:

命令:

aws s3 sync s3://<source_bucket> <local_destination>
Run Code Online (Sandbox Code Playgroud)

输出:

aws s3 sync s3://mybucket .
Run Code Online (Sandbox Code Playgroud)

这将下载所有文件(单向同步).它不会删除当前目录中的任何现有文件(除非您指定--delete),并且它不会更改或删除S3上的任何文件.

您还可以执行S3存储桶到S3存储桶,或本地到S3存储桶同步.

查看文档和其他示例:

http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html

  • 首先运行`aws configure`并添加你的`访问密钥'和`秘密访问密钥`,可以在[这里]找到(https://console.aws.amazon.com/iam/home?#security_credential). (194认同)
  • @JesseCrossen'aws s3 sync`命令不会上传任何内容,但如果S3上不存在文件,它将在本地删除文件.请参阅[文档](http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html). (14认同)
  • 转到Windows安装程序http://aws.amazon.com/cli/.它从环境变量"AWS_ACCESS_KEY_ID"中获取访问密钥ID,从"AWS_SECRET_ACCESS_KEY"中获取您的密钥. (11认同)
  • 请注意,虽然问题仅涉及下载,但我相信此命令将在您的目录和S3之间进行双向同步.如果您没有尝试上传任何内容,请确保当前目录为空. (10认同)
  • 我已经尝试了`s3cmd`和`Cyber​​duck`,但对我而言,'awscli`是迄今为止从我的桶中下载~70.000文件的最快方式. (7认同)
  • 对于macOS用户,"brew install awscli". (5认同)
  • @JesseCrossen根据我的经验,它不是双向同步.它适用于源和目标的概念 - 第一个参数是源,第二个参数是目标. (3认同)
  • 在文档中:http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html --delete(boolean)在同步期间删除目标中但不在源中的文件.因此,除非您实际输入--delete,否则如果我没有记错,它将不会删除文件 (2认同)
  • 让我感到困惑的是,为什么像下载文件夹这样的简单操作就不能只是GUI的一部分。我尊重命令行中的更多高级操作,但这几乎就像AWS出于设计目的而仅仅是出售认证之类的东西一样不必要地复杂。:| (2认同)

Phi*_* M. 163

您可以使用s3cmd下载您的存储桶.

s3cmd --configure
s3cmd sync s3://bucketnamehere/folder /destination/folder
Run Code Online (Sandbox Code Playgroud)

更新

您可以使用另一种称为Rclone的工具.下面是Rclone文档中的代码示例.

rclone sync /home/local/directory remote:bucket
Run Code Online (Sandbox Code Playgroud)

  • 这很慢.特别是如果您尝试逐步使用它.是否存在多线程解决方案,因此可以使带宽饱和? (5认同)

小智 81

我使用了一些不同的方法将Amazon S3数据复制到本地计算机,包括s3cmd,到目前为止最简单的是Cyber​​duck.您需要做的就是输入您的Amazon凭据并使用简单的界面下载/上传/同步您的任何存储桶/文件夹/文件.

截图


Naj*_*thi 45

100%对我有用,我已经从aws s3 backet下载了所有文件。

  1. 安装 AWS CLI。选择您的操作系统并按照此处的步骤操作:安装或更新最新版本的 AWS CLI

  2. 检查AWS版本:aws --version

在此输入图像描述

  1. 运行配置命令:aws configure

在此输入图像描述

  1. aws s3 cp s3://yourbucketname your\local\path --recursive

例如(Windows 操作系统):aws s3 cp s3://yourbucketname C:\aws-s3-backup\project-name --recursive

在此输入图像描述

查看此链接:如何将整个存储桶从 S3 下载到本地文件夹


Dar*_*ila 44

您基本上有很多选择,但最好的选择是使用AWS CLI

这是一个演练

  • 步骤1

在您的计算机中下载并安装AWS CLI

使用MSI安装程序安装AWS CLI(Windows)

使用Bundled Installer(Linux,OS X或Unix)安装AWS CLI

  • 第2步

配置AWS CLI

在此输入图像描述

确保输入在创建帐户时收到的有效访问密钥密钥

  • 第3步

使用以下命令同步s3存储桶

aws s3 sync s3://yourbucket /local/path
Run Code Online (Sandbox Code Playgroud)

将以上命令替换为以下数据

yourbucket >>你要下载的s3水桶

/ local/path >>本地系统中要下载所有文件的路径

希望这可以帮助!


Sar*_*dra 40

要使用AWS S3 CLI下载:

aws s3 cp s3://WholeBucket LocalFolder --recursive
aws s3 cp s3://Bucket/Folder LocalFolder --recursive
Run Code Online (Sandbox Code Playgroud)

要使用代码下载,请使用AWS SDK.

要使用GUI下载,请使用Cyber​​duck.

希望能帮助到你.. :)

  • @Nabin 您可以使用 --include &amp; --exclude 和通配符来排除某些文件或文件夹,如下所示:`aws s3 cp s3://my-bucket-name ./local-folder --recursive --include "* " --exclude "excludeFolder/*" --exclude "includeFolder/excludeFile.txt"` (2认同)

dwo*_*rad 21

S3浏览器是我找到的最简单的方法.它是优秀的软件......它是免费的非商业用途.仅限Windows.

http://s3browser.com/

  • 我刚刚尝试了"将所有文件下载到..."选项(我认为这相当于"下载整个s3存储桶",它说我需要Pro版本. (3认同)
  • 更新:但我能够在存储桶中下载一个足以满足我需求的整个文件夹...... (2认同)

Ive*_*.me 19

如果您使用Visual Studio,请下载http://aws.amazon.com/visualstudio/

安装完成后,转到Visual Studio - AWS Explorer - S3 - 您的存储桶 - 双击

在窗口中,您将能够选择所有文件.右键单击并下载文件.


小智 11

可以帮助一些osx用户的另一个选择是传输.这是一个ftp程序,也可以让你连接到你的s3文件.它有一个选项可以将任何ftp或s3存储作为文件夹安装在finder中.但这只是在有限的时间内.


jer*_*own 9

我已经为s3做了一些开发,我还没有找到一个简单的方法来下载整个存储桶.如果你想用Java编写代码,jets3t lib很容易用来创建一个桶列表并迭代该列表来下载它们.

http://jets3t.s3.amazonaws.com/downloads.html

首先从AWS管理部门获取公共私钥集,以便创建S3service对象...

AWSCredentials awsCredentials = new AWSCredentials(YourAccessKey, YourAwsSecretKey);
s3Service = new RestS3Service(awsCredentials);
Run Code Online (Sandbox Code Playgroud)

然后得到你的桶对象数组......

S3Object[] objects = s3Service.listObjects(YourBucketNameString);
Run Code Online (Sandbox Code Playgroud)

最后,迭代该数组,使用此代码一次下载一个对象...

S3Object obj = s3Service.getObject(bucket, fileName);
            file = obj.getDataInputStream();
Run Code Online (Sandbox Code Playgroud)

我将连接代码放在线程安全的单例中.出于显而易见的原因,省略了必要的try/catch语法.

如果您更喜欢用Python编写代码,那么可以使用Boto代替.

看完BucketExplorer之后PS我做你想做的事. https://forums.aws.amazon.com/thread.jspa?messageID=248429


ash*_*ack 9

AWS CLI中使用此命令:

aws s3 cp s3://bucketname . --recursive
Run Code Online (Sandbox Code Playgroud)


Jam*_*mes 9

@Layke的回答很好,但是如果您有大量数据并且不想永远等待,那么您应该密切关注如何获得AWS S3 CLI sync命令以使桶与大规模并行化同步的文档.以下命令将告诉AWS CLI使用1,000个线程来执行作业(每个小文件或多部分副本的一部分)并预测100,000个作业:

aws configure set default.s3.max_concurrent_requests 1000
aws configure set default.s3.max_queue_size 100000
Run Code Online (Sandbox Code Playgroud)

运行这些后,您可以使用simple sync命令,如下所示:

aws s3 sync s3://source-bucket/source-path s3://destination-bucket/destination-path
Run Code Online (Sandbox Code Playgroud)

要么

aws s3 sync s3://source-bucket/source-path c:\my\local\data\path
Run Code Online (Sandbox Code Playgroud)

在具有CPU 4内核和16GB RAM的系统上,对于像我这样的情况(3-50GB文件),同步/复制速度从大约9.5MiB/s变为700 + MiB/s,比默认配置速度提高了70倍.

  • 这是真正的答案。刚刚测试过,从 ec2 传输大约 2.3GB/分钟。没有大约 1GB/min 的并发选项。救生员。 (3认同)

sin*_*h30 9

AWS CLI 是本地下载整个 S3 存储桶的最佳选择。

  1. 安装AWS CLI。

  2. 配置AWS CLI 以使用默认安全凭证和默认 AWS 区域。

  3. 要下载整个 S3 存储桶,请使用命令

    aws s3 同步 s3://yourbucketname 本地路径

参考不同 AWS 服务的 AWS CLI:AWS 命令​​行界面


Har*_*var 7

AWS sdk API将是上传整个文件夹并存储到s3并将整个s3存储桶下载到本地的最佳选择。

用于将整个文件夹上传到s3

aws s3 sync . s3://BucketName
Run Code Online (Sandbox Code Playgroud)

本地下载整个s3存储桶

aws s3 sync s3://BucketName . 
Run Code Online (Sandbox Code Playgroud)

您还可以为s3中的特定文件夹分配路径(例如BucketName / Path),以进行下载


Kri*_*vas 6

您可以使用https://github.com/minio/mc进行此操作:

mc cp -r https://s3-us-west-2.amazonaws.com/bucketName/ localdir
Run Code Online (Sandbox Code Playgroud)

mc还支持会话,可恢复的下载,上载等等。mc支持Linux,OS X和Windows操作系统。用Golang编写,并在Apache 2.0版下发布。


Muz*_*mil 6

如果您只想从 AWS 下载存储桶,请先在您的机器上安装 AWS CLI。在终端中,将目录更改为要下载文件的位置并运行此命令。

aws s3 sync s3://bucket-name .
Run Code Online (Sandbox Code Playgroud)

如果您还想同步本地和 s3 目录(以防您在本地文件夹中添加了一些文件),请运行以下命令:

aws s3 sync . s3://bucket-name
Run Code Online (Sandbox Code Playgroud)


小智 6

您可以使用同步下载整个 S3 存储桶。例如,下载当前目录下名为bucket1的整个存储桶。

aws s3 sync s3://bucket1 .
Run Code Online (Sandbox Code Playgroud)


jpw*_*ynn 5

如果你使用带有S3Fox的Firefox,可以让你选择所有文件(shift-select first and last)和rightclick并下载所有...我用500多个文件做了没有问题


fun*_*ead 5

在 Windows 中,我首选的 GUI 工具是适用于 S3 的 Cloudberry Explorer,http: //www.cloudberrylab.com/free-amazon-s3-explorer-cloudfront-IAM.aspx 。有一个相当精美的文件浏览器,类似 ftp 的界面。


bsp*_*ion 5

为了添加另一个 GUI 选项,我们使用WinSCP 的 S3 功能。连接非常容易,只需要在 UI 中提供您的访问密钥和秘密密钥。然后,您可以从任何可访问的存储桶浏览和下载您需要的任何文件,包括嵌套文件夹的递归下载。

由于通过安全性清除新软件可能是一项挑战,而且 WinSCP 相当普遍,因此仅使用它而不是尝试安装更专业的实用程序确实有益。


wrs*_*der 5

除了建议之外aws s3 sync,我还建议查看s5cmd

根据我的经验,我发现对于多次下载或大量下载,这比 AWS CLI 快得多。

s5cmd支持通配符,所以这样的事情可以工作:

s5cmd cp s3://bucket-name/* ./folder


小智 5

aws s3 sync s3://<source_bucket> <local_destination>
Run Code Online (Sandbox Code Playgroud)

是一个很好的答案,但如果对象位于存储类 Glacier 灵活检索中,即使文件已恢复,它也不起作用。在这种情况下,您需要添加标志 --force-glacier-transfer 。