1. 安装 s5cmd
# macOS
brew install peak/tap/s5cmd
# Linux
wget https://github.com/peak/s5cmd/releases/latest/download/s5cmd_Linux-64bit.tar.gz
tar -xzf s5cmd_Linux-64bit.tar.gz
在 Linux 上安装 AWS CLI
-
使用包管理器:根据您的 Linux 发行版,使用以下命令安装 unzip(如果未安装)并下载 AWS CLI 安装包:
sudo apt-get install unzip # Ubuntu
sudo yum install unzip # CentOS
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
## 2. 配置凭证
方法一:使用 AWS CLI profiles
~/.aws/credentials:
ini
[source-account]
aws_access_key_id = AKIA…
aws_secret_access_key = xxx
[target-account]
aws_access_key_id = AKIA…
aws_secret_access_key = yyy
## 3. 执行迁移
直接跨账号复制(推荐):
bash
AWS_PROFILE=source-account s5cmd cp ‘s3://source-bucket/*’ /tmp/data/
AWS_PROFILE=target-account s5cmd cp /tmp/data/* s3://target-bucket/
使用管道(无需本地存储):
bash
AWS_PROFILE=source-account s5cmd cat s3://source-bucket/file.txt | \
AWS_PROFILE=target-account s5cmd pipe s3://target-bucket/file.txt
批量并行迁移(s5cmd 优势):
bash
# 生成文件列表
AWS_PROFILE=source-account s5cmd ls ‘s3://source-bucket/*’ > files.txt
# 创建迁移命令文件
awk ‘{print “cp s3://source-bucket/”$NF” /tmp/data/”$NF}’ files.txt > commands.txt
# 执行迁移(源账号下载)
AWS_PROFILE=source-account s5cmd run commands.txt
# 上传到目标账号
AWS_PROFILE=target-account s5cmd cp /tmp/data/* s3://target-bucket/ –concurrency 10
一步到位脚本:
bash
#!/bin/bash
export AWS_PROFILE=source-account
s5cmd ls ‘s3://source-bucket/*’ | awk ‘{print $NF}’ | while read obj; do
filename=$(basename “$obj”)
AWS_PROFILE=source-account s5cmd cat “$obj” | \
AWS_PROFILE=target-account s5cmd pipe “s3://target-bucket/$filename”
done
## 4. 高性能批量迁移
bash
# 使用 s5cmd 的 run 命令批量处理
cat > migrate.txt << ‘EOF’
cp s3://source-bucket/* s3://target-bucket/
EOF
# 分别用不同凭证执行
AWS_PROFILE=source-account s5cmd –stat cp ‘s3://source-bucket/*’ ./temp/
AWS_PROFILE=target-account s5cmd –stat cp ‘./temp/*’ s3://target-bucket/
## 关键优势
– s5cmd 比 s3cmd 快 10-100倍(并行处理)
– 支持通配符和批量操作
– 内置重试机制
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/aiops/318441.html