使用AWS CLI上传文件到S3

3
我是AWS CLI的新手,需要从Linux服务器上传文件到S3。以下是我的使用情况:
输入目录的结构是基于当前日期在服务器上创建文件夹,例如:/users/data/20200329/users/data/20200330
每个文件夹包含多个子文件夹:
/users/data/20200329/govt/inbound/truey.gz   
/users/data/20200329/corp/inbound/672695.gz
/users/data/20200330/govt/inbound/dddd.gz   
/users/data/20200330/corp/inbound/4444.gz

我想上传到S3,如下所示:

s3://bucketname/20200329/truey.gz
s3://bucketname/20200329/672695.gz
s3://bucketname/20200330/dddd.gz
s3://bucketname/20200330/4444.gz

所以简而言之,我不想在S3中有子文件夹,只想要一个包含输入目录中所有子文件夹中的文件的单个日期文件夹。如何使用AWS CLI实现这一点?
并同样。

怀疑在这里使用aws s3 sync可能会有帮助。请查看文档或可用的帮助(aws s3 sync help)。 - undefined
2个回答

3
这将处理单日的所有文件:
aws s3 cp /users/data/20200329/govt/inbound/ \
          s3://bucketname/20200329 \
          --recursive 
aws s3 cp /users/data/20200329/corp/inbound/ \
          s3://bucketname/20200329 \
          --recursive 

如果你想迭代月份中的每一天等内容:
#!/bin/bash

#requires Bash 4.0+ to pad leading 0 in day number
for day in {01..31};
do
   aws s3 cp /users/data/20200329/govt/inbound/ \
            s3://bucketname/202003$day \
            --recursive 
   aws s3 cp /users/data/20200329/corp/inbound/ \
            s3://bucketname/202003$day \
            --recursive 
done

0

将文件放入特定路径的逻辑超出了AWS CLI的能力范围。

您需要发出单独的命令:

aws s3 cp /users/data/20200329/govt/inbound/truey.gz s3://bucketname/20200329/truey.gz 
aws s3 cp /users/data/20200329/corp/inbound/672695.gz s3://bucketname/20200329/672695.gz
aws s3 cp /users/data/20200330/govt/inbound/dddd.gz s3://bucketname/20200330/dddd.gz  
aws s3 cp /users/data/20200330/corp/inbound/4444.gz s3://bucketname/20200330/4444.gz

如果你想要应用一些逻辑来确定文件上传的位置,我建议编写一个脚本(例如使用Python),它将:
- 列出输入文件 - 使用字符串操作提取相关部分 - 发出`upload_file()` API调用,将文件上传到所需位置

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接