我注意到似乎没有从AWS管理控制台下载整个S3存储桶的选项。
有一种简单的方法可以抓住我的一个桶中的所有东西吗?我正在考虑将根文件夹公开,使用wget
抓取所有内容,然后再将其设为私有,但我不知道是否有更简单的方法。
答案 0 :(得分:1037)
AWS最近发布了他们的命令行工具。这很像boto,可以使用sudo easy_install awscli
或sudo pip install awscli
安装完成后,您只需运行:
<强>命令强>:
aws s3 sync s3://mybucket .
<强>输出强>:
download: s3://mybucket/test.txt to test.txt
download: s3://mybucket/test2.txt to test2.txt
这将下载所有文件(单向同步)。它将不删除当前目录中的任何现有文件(除非您specify --delete),并且它不会更改或删除S3上的任何文件。
您还可以执行S3存储桶到S3存储桶,或本地到S3存储桶同步。
查看文档和其他示例:
http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html
虽然以上示例是如何下载完整存储桶,但您也可以通过执行
来反复下载文件夹aws s3 cp s3://BUCKETNAME/PATH/TO/FOLDER LocalFolderName --recursive
这将指示CLI以递归方式在PATH/TO/FOLDER
存储桶中的BUCKETNAME
目录中下载所有文件和文件夹密钥。
答案 1 :(得分:157)
您可以使用s3cmd下载您的存储桶。
s3cmd --configure
s3cmd sync s3://bucketnamehere/folder /destination/folder
<强>更新强>
您可以使用另一种名为Rclone的工具。下面是Rclone文档中的代码示例。
rclone sync /home/local/directory remote:bucket
答案 2 :(得分:74)
我使用了一些不同的方法将Amazon S3数据复制到本地计算机,包括s3cmd,到目前为止最简单的方法是Cyberduck。您只需输入您的Amazon凭据并使用简单界面下载/上传/同步您的任何存储桶/文件夹/文件。
答案 3 :(得分:37)
你基本上有很多选择,但最好的选择是使用 AWS CLI
这是一个演练
在您的计算机中下载并安装AWS CLI
Install the AWS CLI using the MSI Installer (Windows)
Install the AWS CLI using the Bundled Installer (Linux, OS X, or Unix)
配置AWS CLI
确保您输入了在创建帐户时收到的有效访问密钥和密钥
使用以下命令同步s3存储桶
aws s3 sync s3://yourbucket /local/path
将以上命令替换为以下数据
yourbucket &gt;&gt;您要下载的s3存储桶
/ local / path &gt;&gt;您希望下载所有文件的本地系统中的路径
希望这有帮助!
答案 4 :(得分:36)
使用AWS S3 CLI下载
aws s3 cp s3://WholeBucket LocalFolder --recursive
aws s3 cp s3://Bucket/Folder LocalFolder --recursive
要使用代码下载,请使用 AWS开发工具包。
要使用GUI下载,请使用 Cyberduck 。
希望它能帮助...... :)
答案 5 :(得分:17)
S3浏览器是我找到的最简单的方法。它是优秀的软件......它是免费的非商业用途。仅限Windows。
答案 6 :(得分:16)
如果您使用Visual Studio,请下载http://aws.amazon.com/visualstudio/
安装完成后,转到Visual Studio - AWS Explorer - S3 - 您的存储桶 - 双击
在窗口中,您可以选择所有文件。右键单击并下载文件。
答案 7 :(得分:9)
可以帮助某些 osx用户的另一个选项是传输。这是一个ftp程序,也可以让你连接到你的s3文件。并且它可以选择在finder中将任何ftp或s3存储作为文件夹安装。但这只是在有限的时间内。
答案 8 :(得分:8)
我已经为s3做了一些开发,我还没有找到一个简单的方法来下载整个存储桶。 如果你想用Java编写代码,jets3t lib很容易用来创建一个桶列表并迭代该列表来下载它们。
http://jets3t.s3.amazonaws.com/downloads.html
首先从AWS管理部门获取公共私钥集,以便您可以创建S3service对象...
AWSCredentials awsCredentials = new AWSCredentials(YourAccessKey, YourAwsSecretKey);
s3Service = new RestS3Service(awsCredentials);
然后获取你的桶对象数组......
S3Object[] objects = s3Service.listObjects(YourBucketNameString);
最后,迭代该数组,使用此代码一次下载一个对象...
S3Object obj = s3Service.getObject(bucket, fileName);
file = obj.getDataInputStream();
我将连接代码放在线程安全的单例中。出于显而易见的原因,省略了必要的try / catch语法。
如果您更喜欢Python代码,那么可以使用Boto代替。
看完BucketExplorer之后,我做了你想做的事。 https://forums.aws.amazon.com/thread.jspa?messageID=248429答案 9 :(得分:7)
将此命令与AWS CLI:
一起使用aws s3 cp s3://bucketname. --recursive
答案 10 :(得分:7)
@Layke的回答很好,但是如果你有大量的数据并且不想永远等待,你应该密切注意how to get the AWS S3 CLI sync command to synchronize buckets with massive parallelization上的这个文档。以下命令将告诉AWS CLI使用1,000个线程来执行作业(每个小文件或多部分副本的一部分)并预测100,000个作业:
aws configure set default.s3.max_concurrent_requests 1000
aws configure set default.s3.max_queue_size 100000
运行这些后,您可以使用simple sync命令,如下所示:
aws s3 sync s3://source-bucket/source-path s3://destination-bucket/destination-path
或
aws s3 sync s3://source-bucket/source-path c:\my\local\data\path
在具有CPU 4内核和16GB RAM的系统上,对于像我这样的情况(3-50GB文件),同步/复制速度从大约9.5MiB / s增加到700 + MiB / s,速度提高了70倍默认配置。
答案 11 :(得分:4)
如果你使用带有S3Fox的Firefox,可以让你选择所有文件(shift-select first and last)和rightclick并下载所有文件...我用500多个文件做了没有问题
答案 12 :(得分:3)
在Windows中,我首选的GUI工具是适用于S3的Cloudberry Explorer。http://www.cloudberrylab.com/free-amazon-s3-explorer-cloudfront-IAM.aspx。有一个相当完善的文件浏览器,类似ftp的界面。
答案 13 :(得分:3)
您可以使用https://github.com/minio/mc执行此操作:
document.getElementById('container').style.webkitOverflowScrolling = 'auto';
mc还支持会话,可恢复下载,上传等等。 mc cp -r https://s3-us-west-2.amazonaws.com/bucketName/ localdir
支持Linux,OS X和Windows操作系统。用Golang编写,在Apache 2.0版下发布。
答案 14 :(得分:3)
如果您只有文件(没有子目录),快速解决方案是选择所有文件(第一个click
,最后一个Shift+click
)并点击Enter
或{ {1}}并选择right click
。对于大多数数据文件,这将直接下载到您的计算机。
答案 15 :(得分:3)
要添加另一个GUI选项,我们使用WinSCP's S3 functionality。连接非常简单,只需要在UI中输入访问密钥和秘密密钥即可。然后,您可以从任何可访问的存储桶中浏览和下载所需的任何文件,包括递归下载嵌套文件夹。
由于通过安全清除新软件可能是一个挑战,并且WinSCP相当普遍,因此仅使用它而不是尝试安装更专业的实用程序确实是有益的。
答案 16 :(得分:3)
AWS sdk API将是上传整个文件夹并回购到s3并将整个s3存储桶下载到本地的最佳选择。
用于将整个文件夹上传到s3
aws s3 sync . s3://BucketName
用于在本地下载整个s3存储桶
aws s3 sync s3://BucketName .
您还可以为s3中的特定文件夹分配类似于BucketName / Path的路径以下载
答案 17 :(得分:1)
您可以使用s3cmd命令轻松获取它:
s3cmd get --recursive --continue s3://test-bucket local-directory/
答案 18 :(得分:1)
100% 对我有用,我已经从 aws s3 backet 下载了所有文件。
安装 aws cli(并选择您的操作系统,按照步骤操作) https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html
检查 aws 版本:aws --version
运行配置命令:aws configure
[https://www.edureka.co/community/?qa=blob&qa_blobid=11556266437524396613][1]
aws s3 cp s3://yourbucketname your\local\path --recursive
查看此链接: https://www.edureka.co/community/32955/how-to-download-an-entire-bucket-from-s3-to-local-folder
答案 19 :(得分:1)
您只需要传递--recursive和--include“ *”
aws --region "${BUCKET_REGION}" s3 cp s3://${BUCKET}${BUCKET_PATH}/ ${LOCAL_PATH}/tmp --recursive --include "*" 2>&1
答案 20 :(得分:1)
如果您只想从AWS下载存储桶,请首先在计算机中安装AWS CLI。在终端中,将目录更改为要下载文件的目录,然后运行此命令。
aws s3 sync s3://bucket-name .
如果您还想同步本地目录和s3目录(如果您在本地文件夹中添加了一些文件),请运行以下命令:
aws s3 sync . s3://bucket-name
答案 21 :(得分:1)
正如Neel Bhaat在本blog中所解释的那样,有许多不同的工具可用于此目的。有些是AWS提供的,其中大多数是第三方工具。所有这些工具都要求您在工具本身中保存您的AWS账户密钥和密钥。在使用第三方工具时要非常谨慎,因为您保存的凭据可能会花费您,您的全部价值并让您失去信心。
因此,我总是建议使用AWS CLI来实现此目的。您只需从this link安装即可。接下来,运行以下命令并在AWS CLI中保存密钥,机密值。
aws configure
并使用以下命令将AWS S3 Bucket同步到本地计算机。 (本地计算机应安装AWS CLI)
aws s3 sync <source> <destination>
<强>示例:强>
1)对于AWS S3到本地存储
aws s3 sync <S3Uri> <LocalPath>
2)从本地存储到AWS S3
aws s3 sync <LocalPath> <S3Uri>
3)从AWS s3存储桶到另一个存储桶
aws s3 sync <S3Uri> <S3Uri>
答案 22 :(得分:1)
下载所有存储桶,列出它们,列出其内容的一些内容。
//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.");
}
}
答案 23 :(得分:1)
aws sync是完美的解决方案。它不是双向的。它是从源到目的地的单向。此外,如果您有很多项目,最好先创建s3端点,以便下载速度更快(因为下载不是通过互联网而是通过内部网进行)而且不收取费用
答案 24 :(得分:1)
Windows用户需要从此链接下载S3EXPLORER,该链接还包含安装说明: - http://s3browser.com/download.aspx
然后向s3explorer提供诸如secretkey,accesskey和region之类的AWS凭证,此链接包含s3explorer的配置说明:在浏览器中复制粘贴链接:s3browser.com/s3browser-first-run.aspx
现在你的所有s3存储桶都会在s3explorer的左侧面板上显示。
只需选择存储桶,然后单击左上角的“存储桶”菜单,然后从菜单中选择“将所有文件下载到选项”。以下是相同的屏幕截图:
然后浏览文件夹以在特定位置下载存储桶
单击“确定”,您的下载将开始。
答案 25 :(得分:0)
正如@layke所说,从S3 cli下载文件是一种安全可靠的最佳做法。但是在某些情况下,人们需要使用wget下载文件,这是解决方案
aws s3 presign s3://<your_bucket_name/>
此presign将为您提供临时的公共URL,您可以使用presign_url从w3中下载内容,在这种情况下,则使用wget或任何其他下载客户端。
答案 26 :(得分:0)
我的评论并没有真正添加新的解决方案。正如这里许多人所说的,aws s3 sync
是最好的。但是没有人指出一个强大的选项:dryrun
。使用此选项,您可以查看使用sync
时从s3下载/上传的内容。当您不想覆盖本地或s3存储桶中的内容时,这确实很有用。用法如下:
aws s3 sync <source> <destination> --dryrun
在将新内容推送到存储桶之前,我一直都在使用它,以便不上传不需要的更改。
答案 27 :(得分:0)
尝试以下命令:
aws s3 sync yourBucketnameDirectory yourLocalDirectory
例如,如果您的存储桶名称为myBucket
,本地目录为c:\local
,则:
aws s3 sync s3://myBucket c:\local
有关awscli的更多信息,请检查此 here
答案 28 :(得分:0)
AWS CLI是在本地下载整个S3存储桶的最佳选择。
Install AWS CLI。
Configure AWS CLI,用于使用默认安全凭证和默认AWS区域。
要下载整个S3存储桶,请使用命令
使s3同步s3:// yourbucketname localpath
针对不同的AWS服务使用AWS cli的参考:https://docs.aws.amazon.com/cli/latest/reference/
答案 29 :(得分:0)
您可以使用此AWS cli命令将整个S3存储桶内容下载到本地文件夹
aws s3 sync s3://your-bucket-name "Local Folder Path"
如果您看到这样的错误
fatal error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)
-no-verify-ssl(布尔值)
默认情况下,AWS CLI在与AWS服务通信时使用SSL。对于每个SSL连接,AWS CLI将验证SSL证书。此选项将覆盖验证SSL证书的默认行为。 reference
将此标签与命令-no-verify-ssl
一起使用aws s3 sync s3://your-bucket-name "Local Folder Path" --no-verify-ssl
答案 30 :(得分:0)
如果存储桶很大,则有一个名为s4cmd
的命令可以建立并行连接并缩短下载时间:
要像在Debian上安装它
apt install s4cmd
如果您有点子:
pip install s4cmd
它将读取~/.s3cfg
文件(如果存在)(如果未安装s3cmd
并运行s3cmd --configure
),或者您可以在命令中指定--access-key=ACCESS_KEY --secret-key=SECRET_KEY
。
cli类似于s3cmd
。对于您的情况,建议使用sync
,因为您可以取消下载并重新开始下载,而不必重新下载文件。
s4cmd [--access-key=ACCESS_KEY --secret-key=SECRET_KEY] sync s3://<your-bucket> /some/local/dir
请注意,如果下载大量数据(> 1TB)可能会影响您的账单,请先计算费用
答案 31 :(得分:0)
使用awscli将文件下载/上传到s3总是更好。同步将帮助您轻松恢复。
aws s3 sync s3://bucketname/ .
答案 32 :(得分:0)
除了对 aws s3 sync
的建议之外,我还建议您查看 s5cmd
(https://github.com/peak/s5cmd)。
根据我的经验,我发现对于多次下载或大量下载,这比 AWS CLI 快得多。
s5cmd
支持通配符,所以类似这样的事情会起作用:
s5cmd cp s3://bucket-name/* ./folder