在 AWS S3 上将数据从一个文件夹移动/复制到另一个文件夹

Shi*_*ndi 16 python amazon-s3 aws-cli boto3

我正在寻找在 AWS S3 存储桶上将数据从一个文件夹移动/复制到另一个文件夹的所有方法。


方法 1:通过 AWS CLI(最简单)

在你的实例上下载并安装 awscli,我在这里使用 windows(64 位链接)并运行“asw configure”来填写你的配置,然后在 cmd 上运行这个单一的命令

aws s3 cp s3://from-source/ s3://to-destination/ --recursive
Run Code Online (Sandbox Code Playgroud)

这里cp用于复制和递归复制所有文件


方法 2:通过 AWS CLI 使用 python

import os
import awscli
if os.environ.get('LC_CTYPE', '') == 'UTF-8':
    os.environ['LC_CTYPE'] = 'en_US.UTF-8'

from awscli.clidriver import create_clidriver
driver = create_clidriver()
driver.main('s3 mv s3://staging/AwsTesting/research/    s3://staging/AwsTesting/research_archive/ --recursive'.split())
Run Code Online (Sandbox Code Playgroud)

即使这对我来说也很完美


方法 3:通过 Boto 使用 python

import boto3
s3 = boto3.resource('s3')
copy_source = {
    'Bucket': 's3://staging/',
    'Key': 'AwsTesting/research/'
}
s3.meta.client.copy(copy_source, ''s3://staging/'', 'AwsTesting/research_archive/')
Run Code Online (Sandbox Code Playgroud)

根据我的理解,我假设存储桶的“键”只是文件夹前缀,所以我在这里提到了文件夹路径

错误:

存储桶名称“s3://staging”无效:存储桶名称必须与正则表达式“^[a-zA-Z0-9.-_]{1,255}$”匹配

即使我将其更改为简单的存储桶名称作为“暂存”,但没有成功。


我如何通过 boto 了解存储桶连接以及此密钥的概念?

小智 8

cp使用CLI 的替代方法是sync- https://docs.aws.amazon.com/cli/latest/reference/s3/sync.html

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

它本质上会做同样的事情。


小智 7

import boto3
s3 = boto3.resource('s3')
copy_source = {
    'Bucket': 'staging',
    'Key': 'AwsTesting/research/filename.csv'
}
s3.meta.client.copy(copy_source, 'staging', 'AwsTesting/')
Run Code Online (Sandbox Code Playgroud)