我注意到似乎没有从 AWS 管理控制台下载整个 s3
存储桶的选项。
有没有一种简单的方法可以抓住我的一个桶中的所有东西?我正在考虑将根文件夹公开,使用 wget
将其全部获取,然后再次将其设为私有,但我不知道是否有更简单的方法。
aws s3 sync
是最好的。但是没有人指出一个强大的选项:dryrun
。此选项允许您查看在使用 sync
时将从 s3 下载/上传到 s3 的内容。当您不想覆盖本地或 s3 存储桶中的内容时,这非常有用。这是如何使用的:aws s3 sync <source> <destination> --dryrun
在将新内容推送到存储桶之前,我一直使用它,以免上传不需要的更改。
aws s3 sync
在实践中的快速视频:youtube.com/watch?v=J2aZodwPeQk
AWS CLI
有关详细信息,请参阅“AWS CLI Command Reference”。
AWS 最近发布了他们的命令行工具,它的工作方式很像 boto,可以使用
sudo easy_install awscli
或者
sudo pip install awscli
安装后,您可以简单地运行:
aws s3 sync s3://<source_bucket> <local_destination>
例如:
aws s3 sync s3://mybucket .
会将 mybucket
中的所有对象下载到当前目录。
并将输出:
download: s3://mybucket/test.txt to test.txt
download: s3://mybucket/test2.txt to test2.txt
这将使用单向同步下载您的所有文件。除非您指定 --delete
,否则它不会删除当前目录中的任何现有文件,并且不会更改或删除 S3 上的任何文件。
您还可以执行 S3 存储桶到 S3 存储桶,或本地到 S3 存储桶同步。
查看 documentation and other examples。
而上面的例子是如何下载一个完整的桶,你也可以通过执行递归下载一个文件夹
aws s3 cp s3://BUCKETNAME/PATH/TO/FOLDER LocalFolderName --recursive
这将指示 CLI 在 BUCKETNAME
存储桶的 PATH/TO/FOLDER
目录中递归下载所有文件和文件夹密钥。
您可以使用 s3cmd
下载您的存储桶:
s3cmd --configure
s3cmd sync s3://bucketnamehere/folder /destination/folder
您可以使用另一个名为 rclone
的工具。这是 Rclone 文档中的代码示例:
rclone sync /home/local/directory remote:bucket
我使用了几种不同的方法将 Amazon S3 数据复制到本地机器,包括 s3cmd
,目前最简单的是 Cyberduck。
您需要做的就是输入您的亚马逊凭证并使用简单的界面下载、上传、同步您的任何存储桶、文件夹或文件。
https://i.stack.imgur.com/6WUiA.png
您有很多选择可以做到这一点,但最好的选择是使用 AWS CLI。
这是一个演练:
在您的机器上下载并安装 AWS CLI:使用 MSI 安装程序 (Windows) 安装 AWS CLI。使用适用于 Linux、OS X 或 Unix 的捆绑安装程序安装 AWS CLI。配置 AWS CLI:确保输入您在创建账户时收到的有效访问密钥和密钥。使用以下命令同步 S3 存储桶: aws s3 sync s3://yourbucket /local/path 在上述命令中,替换以下字段:yourbucket >> 您要下载的 S3 存储桶。 /local/path >> 本地系统中要下载所有文件的路径。
s3://
前缀!!!使用 aws s3 ls
您不需要 s3://
前缀,但需要 cp
命令。
使用 AWS S3 CLI 下载:
aws s3 cp s3://WholeBucket LocalFolder --recursive
aws s3 cp s3://Bucket/Folder LocalFolder --recursive
要使用代码下载,请使用 AWS 开发工具包。
要使用 GUI 下载,请使用 Cyberduck。
aws s3 cp s3://my-bucket-name ./local-folder --recursive --include "*" --exclude "excludeFolder/*" --exclude "includeFolder/excludeFile.txt"
@Layke 的答案很好,但是如果您有大量数据并且不想永远等待,您应该阅读“AWS CLI S3 Configuration”。
以下命令将告诉 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
或者
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 倍。
default
替换为 profile-name
。而是使用这个:aws configure set s3.max_concurrent_requests 1000 --profile profile-name
。
如果您使用 Visual Studio,请下载“AWS Toolkit for Visual Studio”。
安装后,进入 Visual Studio - AWS Explorer - S3 - 你的存储桶 - 双击
在窗口中,您将能够选择所有文件。右键单击并下载文件。
100% 对我有用,我已经从 aws s3 backet 下载了所有文件。
安装 aws cli(并选择您的操作系统,按照步骤操作) https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html 检查 aws 版本:aws --version
https://i.stack.imgur.com/Lnjoq.jpg
运行配置命令:aws configure
https://i.stack.imgur.com/NyQvd.jpg
aws s3 cp s3://yourbucketname your\local\path --recursive
例如(Windows 操作系统):aws s3 cp s3://yourbucketname C:\aws-s3-backup\project-name --recursive
https://i.stack.imgur.com/wO2xk.jpg
查看此链接:https://www.edureka.co/community/32955/how-to-download-an-entire-bucket-from-s3-to-local-folder
对于 Windows,S3 Browser 是我找到的最简单的方法。它是一款优秀的软件,并且可以免费用于非商业用途。
另一个可以帮助某些 OS X 用户的选项是 Transmit。
它是一个 FTP 程序,还可以让您连接到您的 S3 文件。而且,它可以选择将任何 FTP 或 S3 存储挂载为 Finder 中的文件夹,但仅限于有限的时间。
我已经为 S3 做了一些开发,但我还没有找到一种简单的方法来下载整个存储桶。
如果您想用 Java 编写代码,jets3t 库很容易用于创建存储桶列表并遍历该列表以下载它们。
首先,从 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 后,“Downloading the whole bucket”可能会做你想做的事。
AWS sdk API 只会将整个文件夹和 repo 上传到 s3 并将整个 s3 存储桶下载到本地的最佳选择。
用于将整个文件夹上传到 s3
aws s3 sync . s3://BucketName
用于在本地下载整个 s3 存储桶
aws s3 sync s3://BucketName .
您还可以为 s3 中的特定文件夹分配路径,如 BucketName/Path 以进行下载
您可以使用 https://github.com/minio/mc 执行此操作:
mc cp -r https://s3-us-west-2.amazonaws.com/bucketName/ localdir
mc 还支持会话、可恢复下载、上传等等。 mc
支持 Linux、OS X 和 Windows 操作系统。用 Golang 编写并在 Apache 2.0 版下发布。
如果您只想从 AWS 下载存储桶,请先在您的机器上安装 AWS CLI。在终端中将目录更改为要下载文件的位置并运行此命令。
aws s3 sync s3://bucket-name .
如果您还想同步本地和 s3 目录(如果您在本地文件夹中添加了一些文件),请运行以下命令:
aws s3 sync . s3://bucket-name
要添加另一个 GUI 选项,我们使用 WinSCP's S3 functionality。它非常容易连接,只需要在 UI 中使用您的访问密钥和密钥。然后,您可以从任何可访问的存储桶中浏览和下载所需的任何文件,包括嵌套文件夹的递归下载。
由于通过安全性清除新软件可能是一项挑战,而且 WinSCP 相当普遍,因此仅使用它而不是尝试安装更专业的实用程序会非常有益。
AWS CLI 是在本地下载整个 S3 存储桶的最佳选择。
安装 AWS CLI。配置 AWS CLI 以使用默认安全凭证和默认 AWS 区域。要下载整个 S3 存储桶,请使用命令 aws s3 sync s3://yourbucketname localpath
将 AWS cli 用于不同 AWS 服务的参考:https://docs.aws.amazon.com/cli/latest/reference/
如果您将 Firefox 与 S3Fox 一起使用,那么您可以选择所有文件(shift-select first 和 last)并右键单击并下载所有文件。
我已经完成了 500 多个文件,没有任何问题。
如果那里只有文件(没有子目录),一个快速的解决方案是选择所有文件(第一个是 click
,最后一个是 Shift+click
)并点击 Enter
或 right click
并选择 Open
。对于大多数数据文件,这会将它们直接下载到您的计算机上。
试试这个命令:
aws s3 sync yourBucketnameDirectory yourLocalDirectory
例如,如果您的存储桶名称为 myBucket
,本地目录为 c:\local
,则:
aws s3 sync s3://myBucket c:\local
有关 awscli 的更多信息,请查看此aws cli installation
Windows 用户需要从此链接下载 S3EXPLORER,该链接也有安装说明:- http://s3browser.com/download.aspx 然后为您提供 AWS 凭证,如 s3explorer 的密钥、访问密钥和区域,此链接包含 s3explorer 的配置说明:在浏览器中复制粘贴链接:s3browser.com/s3browser-first-run.aspx 现在您的所有 s3 存储桶都将显示在 s3explorer 的左侧面板上。只需选择存储桶,然后单击左上角的存储桶菜单,然后从菜单中选择将所有文件下载到选项。以下是相同的屏幕截图:
然后浏览文件夹以在特定位置下载存储桶 单击确定,您的下载将开始。
aws sync 是完美的解决方案。它没有两种方式..它是从源到目的地的一种方式。此外,如果您的存储桶中有很多项目,最好先创建 s3 端点,以便下载速度更快(因为下载不是通过 Internet 而是通过 Intranet)并且不收费
正如@layke 所说,从 S3 cli 下载文件是安全可靠的最佳做法。但是在某些情况下,人们需要使用 wget 来下载文件,这里是解决方案
aws s3 presign s3://<your_bucket_name/>
这将使您获得临时公共 URL,您可以使用该 URL 使用 presign_url 从 S3 下载内容,在您的情况下使用 wget 或任何其他下载客户端。
你只需要通过 --recursive & --include "*"
aws --region "${BUCKET_REGION}" s3 cp s3://${BUCKET}${BUCKET_PATH}/ ${LOCAL_PATH}/tmp --recursive --include "*" 2>&1
使用 awscli 将文件下载/上传到 s3 总是更好。同步将帮助您轻松恢复。
aws s3 sync s3://bucketname/ .
除了对 aws s3 sync
的建议之外,我还建议查看 s5cmd
(https://github.com/peak/s5cmd)。
根据我的经验,我发现对于多次下载或大量下载,这比 AWS CLI 快得多。
s5cmd
支持通配符,因此可以使用以下方法:
s5cmd cp s3://bucket-name/* ./folder
您可以使用同步下载整个 S3 存储桶。例如,要在当前目录下载名为 bucket1 的整个存储桶。
aws s3 sync s3://bucket1 .
这里有一些东西可以下载所有存储桶,列出它们,列出它们的内容。
//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.");
}
}
不定期副业成功案例分享
aws configure
并添加您的access key
和secret access key
,它们可以在 here 中找到。s3cmd
和Cyberduck
,但对我来说,awscli
是迄今为止从我的存储桶下载约 70.000 个文件的最快方法。aws s3 sync
命令不会上传任何内容,但如果文件在 S3 上不存在,它将在本地删除文件。请参阅the documentation。